イベントハンドラがどのようにアタッチされているかによって、イベントハンドラの実行順序が異なるのはなぜですか?下の例では、DOM
要素の特定のイベントを処理するために.on()
と.addEventListener()
メソッドを使用しています。jQuery .on(); vs JavaScript .addEventListener();
jsfiddle:http://jsfiddle.net/etsS2/
私は、この特定の例では、イベントハンドラが実行されようとしている順序はevent-bubbling
に依存することは考えて - ので、元のイベントtarget
から開始してまで移動しますdocument
要素。
document.getElementById('outer').addEventListener('mouseup', function (event) {
//$('#outer').on('mouseup', function (event) {
alert('This alert should not show up!');
}, false);
私はon();
バージョンのコメントを解除した場合すべてが期待どおりに動作します - jQuery
は無地JavaScript
に反して、イベントをどのように処理するかの違いがありますか?
'return false'はjQueryイベントハンドラで' event.preventDefault() 'と' event.stopPropagation() 'も行います。 – Jasper
この構造体を作成したのは、 'a.link'要素が動的に追加されていて、何らかの理由で' outer' divがその特定のイベントを処理しないようにする必要があるからです。つまり、基本的には、$(document.on)( 'mouseup'、 'a.link' ...)は$( 'a.link')と同じです:live( 'mouseup'、... )? – MonkeyCoder
はい - '.live()'、 '.delegate()'、または新しい '.on()'のような仕組みはバブリングを介して機能する唯一の方法であり、バブリングは内側から働きます。代わりに、動的に追加された要素のイベントリスナーがDOMに追加されたときに要素に直接バインドされるようにすることができます。 – Pointy