2

Dojo でキーダウン イベントをバインドするために .on() を使用しました。イベントが発生した後、イベントのバインドを解除する必要がありますが、何も機能していないようです。彼らのドキュメントによると、イベントは .remove() メソッドを持つオブジェクトを返しますが、このメソッドにアクセスしたり適用したりする方法を一生理解できません。

どんな助けでも大歓迎です。

ありがとう!

    query('#video-topics-input').on('keydown',function(e){
        topicsDrop.keyDownFunc(e, e.keyCode);
    });
4

2 に答える 2

4

dojo.on は、リスナーのバインドを解除するために前述の .remove 関数を持つイベント ハンドルを返します。ただし、あなたの場合は、dojo.NodeList で動作するチェーンされた dojo.query を使用しています。

これは基本的に、配列の観点から考える必要があることを意味します。セレクターは ID であるため、上記の例では 1 つのエントリを持つ配列が返されます。

イベントリスナーをバインドするには:

var eventHandles = query('#video-topics-input').on('keydown',function(e){
        topicsDrop.keyDownFunc(e, e.keyCode);
});

そして、これらをアンバインドするには:

eventHandles.forEach(function(handle) { handle.remove() });

より効率的なアプローチは、クエリを使用して byId を検索しないことです。

于 2012-06-21T18:56:41.177 に答える
0

@mschrの回答に追加するいくつかのこと

彼が述べたように、idで検索している場合は、おそらく単一のdomNodeを返す関数を使用する必要がdojo/domありbyidます。これを行うと、その機能を利用することもできdojo/onます。この関数、イベントハンドラーを一度起動してから、切断します。once

require(['dojo/dom','dojo/on',function(dom,on){
  var node = dom.byId('video-topics-input');
  on.once(node, 'keydown',function(e){
    //some event handler that should only be fired once.
  });
});
于 2012-06-22T12:17:46.423 に答える