1

Menu イベントをサブスクライブするための YUI のチュートリアルを読み、従いました。また、Menu、 MenuBar、および Custom Events の 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 リスナーをアタッチしようとしています。バブリング ライブラリを依存関係として追加したくありません。

4

3 に答える 3

3

YUIMenuウィジェットの作者であるToddKlootsがここにいます。DOMベースのイベントをサブスクライブする場合、イベント名はすべて小文字です。したがって、「マウスオーバー」イベントの場合は、次のようにサブスクライブします。

BuyMenu.subscribe('mouseover'、onMouseOver、{foo:'bar'}、false);

keypressイベントハンドラーについて:正しくサブスクライブしています。ただし、キー関連のイベントハンドラーは、メニューにフォーカスがある場合にのみ起動することに注意してください。したがって、キー関連のイベントハンドラーをテストする前に、メニューにフォーカスがあることを確認してください。また、すべてのキーがIEで「keypress」イベントを発生させるわけではないため、「keypress」ではなく「keydown」イベントをリッスンすることをお勧めします。

他にご不明な点がございましたら、ydn-javascriptYまでお問い合わせください。そのグループのメッセージを頻繁に監視しながらグループ化します。

それがお役に立てば幸いです。

  • トッド
于 2008-10-19T22:53:09.893 に答える
0

私のテストに基づいて、以下が機能します。

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

Menuただし、これは がイベントを受信したときにのみ発生するkeypressため、すでにフォーカスを持っている必要があります。

于 2008-10-02T09:49:53.193 に答える
0

onShow は関数を指していますか?

例えば。

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