我已阅读并关注YUI's tutorial订阅菜单事件。我还查看了菜单,MenuBar和自定义事件的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库添加为依赖项。
答案 0 :(得分:3)
Todd Kloots,YUI菜单小部件的作者。订阅基于DOM的事件时,事件名称全部为小写。因此,对于“mouseover”事件,订阅如下:
buyMenu.subscribe('mouseover',onMouseOver,{foo:'bar'},false);
关于你的按键事件处理程序:你正确订阅。但是,请记住,任何与键相关的事件处理程序仅在菜单具有焦点时才会触发。因此,在测试与密钥相关的事件处理程序之前,请确保您的菜单具有焦点。另外 - 我建议听“keydown”事件而不是“keypress”,因为并非所有键都会导致在IE中触发“keypress”事件。
如果您有任何其他问题,请将它们指向ydn-javascript Y!分组,因为我经常监视该组上的消息。
我希望有所帮助。
答案 1 :(得分:0)
根据我的测试,以下内容将起作用:
oMenu.subscribe('keypress', function () { alert("I'm your friendly neighborhood keypress listener.")});
但只有在Menu
收到keypress
事件时才会触发,因此需要有焦点。
答案 2 :(得分:0)
onShow是否指向一个函数?
例如
var onShow = function()
{
alert("Click!");
}