我是否不正确地订阅了YUI菜单事件?

时间:2020-03-06 14:59:22  来源:igfitidea点击:

我已阅读并遵循YUI的教程来订阅Menu事件。我还浏览了API和Menu,MenuBar和Custom Events的代码位,但是以下内容不起作用

// 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侦听器。我不想将冒泡库添加为依赖项。

解决方案

根据我的测试,以下将起作用:

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

但这仅在Menu接收到keypress事件时才触发,因此它需要已经具有焦点。

onShow是否指向功能?

例如。

var onShow = function()
{
    alert("Click!");
}

这里是YUI菜单小部件的作者Todd Kloots。订阅基于DOM的事件时,事件名称均为小写。因此,对于" mouseover"事件,请按以下方式订阅:

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

关于按键事件处理程序:我们正在正确订阅。但是,请记住,只有在菜单具有焦点的情况下,才会触发与键相关的所有事件处理程序。因此,在测试与键相关的事件处理程序之前,请确保菜单具有焦点。我也建议我们侦听" keydown"事件而不是" keypress",因为并非所有键都会导致IE中触发" keypress"事件。

如果我们还有其他疑问,请直接将其指向ydn-javascript Y!分组时,我经常监视该分组上的消息。

希望对我们有所帮助。

  • 托德