2016-04-03 4 views
1

を取り付けていません。このイベントはDOMにアタッチされますが、ターゲットは明らかに単一のボタンに限定されていますが、ハンドラはクリックが検出されたときにいつでも起動するようです。どこでもドキュメント上にあります。のaddEventListenerはそうは以下のように、私はネイティブのDOMの<code>addEventListener</code>イベントを使用しています右スコープに

何か間違っていますか?

p.s.ここではブラウザの検査官が_listener配列を見ています... "ターゲット"を強調表示することは、実際に私がターゲットにしようとしているボタンだけを指していることに注意してください。 AKA、ターゲットはノードを識別するために使用されるセレクタではなく、DOMノードです。

image


私は今目標とDOM要素でデバッガを見ていると私は、以下を参照してください。勇敢な人のため

enter image description here


を、ここですコードの作業デモ

https://ui-animate.firebaseapp.com/

完全なソースコードはここにある:link

+3

あなたのコードは正常に見えて、私はそれをテストしました。デバッガツールに移動し、ember464要素を調べ、「イベントリスナー」を選択して、祖先のチェックボックスを選択し、役立つかどうかを確認します。 –

+0

@SideriteZackwehdex提案に感謝します。私は接続したイベントリスナーのスクリーンショットを追加しました。これは、99%が正しいスコープをキャプチャしているとは限りませんが、ウィンドウレベルにアタッチしています。 :( – ken

答えて

1

[OK]を、問題はしていた第二ボタンを「クリック」イベントは、この問題の主題であるによってトリガーされます私が質問に示していないコードのビット。最近のブラウザはすべて、DOMメソッドaddEventListenerをサポートするだけattachEventを持っている古いブラウザをサポートするために、私は次のような抽象化を追加しました:

registerListener(target, type, callback) { 
    const addListener = target.addEventListener || target.attachEvent; 
    const eventName = target.addEventListener ? type : 'on' + type; 

    addListener(eventName, callback); 
}, 

これに伴う問題は、「これ」は、文脈がコールに失われることです。代わりに私は次のように変更しました:

registerListener(target, type, callback) { 
    const listenerFunction = target.addEventListener ? 'addEventListener' : 'attachEvent'; 
    const eventName = target.addEventListener ? type : 'on' + type; 

    target[listenerFunction](eventName, callback); 
}, 
+1

)あなたはaddListener.apply(target、[eventName、callback])を使用している可能性があります。私はui-animate関数が動作するdomElementを取りますが、実際にはイベントのソースあなたがそれを解決してくれてうれしいです。 –

関連する問題