2008-10-01 64 views
1

我已阅读并遵循YUI's tutorial订阅菜单事件。我还通过API和菜单,菜单的代码位,和自定义事件看,但以下拒绝工作我是否订阅YUI菜单事件不当?

// 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。我不想将Bubbling库作为依赖项添加。

回答

0

根据我的测试,下面的工作:

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

但只有火灾时Menu正在接收keypress事件,所以它需要已经有焦点。

0

onShow是否指向一个函数?

例如。

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

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

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

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

如果您有任何其他问题,请将它们指向ydn-javascript Y!我经常监视那个组的消息。

我希望有帮助。

  • 托德