2008-10-01 41 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!我經常監視那個組的消息。

我希望有幫助。

  • 託德