1

プロジェクトに純粋なWinJS(jQueryなし)を使用していて、困惑する要件に遭遇しました。

'bob'というDOM要素があるとしましょう(ただし、これは必ずしもDOM要素であるとは限りません)。イベントリスナーをアタッチするには、次のようにします。

bob.addEventListener('click', function ()
{
  // Some code goes here
});

同じイベント名(キューに入れられているだけなので問題ありません)であっても、「bob」に多くのイベントリスナーを追加することを妨げるものは何もありません。

特定のオブジェクトに関連付けられているイベント/リスナーを列挙できる必要があります。これにより、実行時にそれらの一部を選択的に置き換えたり、微調整したりできます。

これを達成する方法について何か考えはありますか?

4

2 に答える 2

2

addEventListener を使用して追加されたイベントを列挙することはできません。イベントを追加する方法はお勧めできません (少なくとも私には :)。addEventListener を使用していますが、匿名メソッドを使用しています。その場合、ハンドルがないため、そのイベントを削除することはできません。関数を作成してから、名前付き関数 ( myelement.addEventListener("event", myfunction)) を割り当てることをお勧めします。要素にイベントを追加するたびに、それをコレクション (要素自体にぶら下がっている配列) に追加するだけで、イベントのリストが得られます。

于 2012-12-25T15:14:51.133 に答える
0

場合によっては、アタッチされたイベント リスナーを列挙できることがわかります。

オブジェクトで 'Events' Mixin を使用している場合、混合メソッド (addEventListener、removeEventListener、または dispatchEvent) のいずれかを呼び出すと、ターゲット オブジェクトは _listeners というプロパティを取得します (まだ存在しないと仮定します)。 )。

実際の例として、この mixin を使用するオブジェクトにアタッチされたイベント リスナーの数をカウントする関数を次に示します。

/*
 * Counts the number of attached listeners
 */
 countListeners: function()
 {
    var count = 0;

    if (this._listeners)
    {
       var key;

       for (key in this._listeners)
       {
          if (this._listeners.hasOwnProperty(key))
          {
             count++;
          }
       }
    }

    return count;
 }

これが誰かを助けることを願っています!

G

于 2013-01-11T19:14:29.853 に答える