1

我已阅读并遵循YUI 的订阅菜单事件的教程。我还查看了菜单、菜单栏和自定义事件的 API 和代码位,但以下内容无法正常工作

// oMenuBar is a MenuBar instance with submenus
var buyMenu = oMenuBar.getSubmenus()[1];

// this works
buyMenu.subscribe('show', onShow, {foo: 'bar'}, false);

// using the subscribe method doesn't work
buyMenu.subscribe('mouseOver', onMouseOver, {foo: 'bar'}, false);

// manually attaching a listener doesn't work
YAHOO.util.Event.addListener(buyMenu, 'mouseOver', onMouseOver);

// http://developer.yahoo.com/yui/docs/YAHOO.widget.Menu.html#event_keyPressEvent        
// there is a keyPress Event, but no spelling of it will trigger the handler
buyMenu.subscribe('keypress', onShow, {foo: 'bar'}, false);
buyMenu.subscribe('keypressed', onShow, {foo: 'bar'}, false);
buyMenu.subscribe('keyPressed', onShow, {foo: 'bar'}, false);
buyMenu.subscribe('keyPress', onShow, {foo: 'bar'}, false);

从功能上讲,我正在尝试为 MenuBar 的每个子菜单附加一个 keyPress 侦听器。我不想将 Bubbling 库添加为依赖项。

4

3 回答 3

3

Todd Kloots 这里是 YUI 菜单小部件的作者。当您订阅基于 DOM 的事件时,事件名称都是小写的。因此,对于“鼠标悬停”事件,订阅如下:

buyMenu.subscribe('mouseover', onMouseOver, {foo: 'bar'}, false);

关于您的按键事件处理程序:您正在正确订阅。但是,请记住,任何与键相关的事件处理程序只有在菜单具有焦点时才会触发。因此,在测试与键相关的事件处理程序之前,请确保您的菜单具有焦点。另外 - 我建议监听“keydown”事件而不是“keypress”,因为并非所有键都会导致在 IE 中触发“keypress”事件。

如果您有任何其他问题,请直接向 ydn-javascript Y! 分组,因为我经常监视该组上的消息。

我希望这会有所帮助。

  • 托德
于 2008-10-19T22:53:09.893 回答
0

Based on my testing, the following will work:

oMenu.subscribe('keypress', function () { alert("I'm your friendly neighborhood keypress listener.")});

but that only fires when the Menu is receiving the keypress event, so it would need to already have focus.

于 2008-10-02T09:49:53.193 回答
0

onShow 是否指向一个函数?

例如。

var onShow = function()
{
    alert("Click!");
}
于 2008-10-09T22:47:43.463 回答