2017-05-11 1 views
1

私はそれらを動的にするためにdocument要素にイベントをバインドします。jQueryは、最初にバインドする動的イベントを強制します。

これらのイベントは、要素に直接バインドされたAFTERイベントを実行するという問題があります。

最初に実行する要素をバインドするコードがありますが、動的コンテンツでは機能しません。非動的コンテンツに使用するコードは次のとおりです。

この機能は、.fn.extendにあります。

私が前に述べたように、ドキュメント変数にバインドされた動的コンテンツに対して、同じことをしたいと思います。例えば...

$(document).on("click", "div", function(){}); 

私はこれが真上コードの後に​​実行したい:@epascarelloコメントに書い同様

$("div").on("click", function(){}); 
+1

それは.......イベントの代表団は、起こるべきはずです。イベントの委譲を最初に行うには、それ以上のことは起こりません。 – epascarello

+0

@epascarello私の悪い、私はポストを編集しました。上記のコードの後に​​以下のコードを実行します。 – user7965134

+0

@epascarelloすべてのdivで最初に動的イベントを強制的に実行したいです。 – user7965134

答えて

0

これができない、あなたがする必要があります別の何かを考え出す。

回避策は、コードのロジックを回避する必要があります。いずれにしても、私はあなたに、イベントを却下するために何が起こるべきであるかの証拠を作成するだけの悪いコードを「私に言わせてください」と提案します。

パラメータを追加するには.trigger()メソッドを使用し、無限ループを回避するにはevent.stopPropagation()を使用します。

現在の要素にクリックイベントハンドラがあり、イベントを再度トリガする場合、委譲されたイベントでテストします。

$('#btn').on('click', function(e) { 
 
    $(document.body).append($('<div/>', {text: 'CLICK ME: NEW DIV'})); 
 
}); 
 

 
$("div").on("click", function(e, fromInner){ 
 
    // revert event bubling.... 
 
    if (fromInner == undefined) { 
 
     return; 
 
    } 
 
    e.stopPropagation(); 
 
    //normal code......... 
 
    console.log('Normal click event'); 
 
}); 
 

 
$(document).on("click", "div", function(e) { 
 
    // revert event bubling.... 
 
    if ($._data(this).events != undefined && $._data(this).events[e.type] != undefined) { 
 
     $(this).trigger('click', ['fromInner']); 
 
    } 
 
    console.log('Delegated Click'); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 

 
<button type="button" id="btn">Add new DIV</button> 
 
<div>CLICK ME</div>

0

あなたはそれだけでコンテナへ出ターゲット要素から作品イベントバブリングを使用し、jQueryのイベントの代表団でこれを行うことはできません。しかし、プレーンなJavaScriptのaddEventListener()メソッドは、のキャプチャをサポートしています。これは反対方向です。オプションの第3引数を使用して、イベントリスナーのキャプチャモードを有効にすることができます。 Event Bubbling and Capturingを参照してください。

だから私はあなたが書くことができるはずだと思う:イベントは、直接要素にバインドした後

document.addEventListener("click", function() {...}, true); 
関連する問題