0

私はdust.jsを使用しています(適切なドキュメントがないためにグーグルで調べた後)。最後に、ハイパーリンクを動的に作成することができました。次に、動的に生成されたハイパーリンクにオンクリック機能を提供したいと思います。

function createLink(){

    // register the template loading method with dust now
    var compiled = dust.compile("Hello <a href='#' id='linked'>{name}</a>!", "intro");
    dust.loadSource(compiled);

    dust.render("intro", {name: "Fred"}, function(err, out) {
        console.log(out);
        $("#displayHelloSection").html(out);
    });

}

以下は私のドキュメントの準備です。奇妙なことに、生成されたハイパーリンクをクリックすると、Apple が表示されますが、Orange は表示されません。2番目のonclickが機能しなかった理由を知りたいですか? 違いは、最初のものでは、ドキュメントを使用して ID (「#linked」) を参照しています。2 番目のものでは、ID に直接アクセスしています。

$(document).ready(function() {


    $(document).on('click','#linked',function(e){

     alert("Apple");

    });

    $('#linked').on('click', function() {

       alert('Orange');

    });

});
4

1 に答える 1

3

次のように指定されたイベント ハンドラー:

$('#linked').on('click', function() {

"#linked"このコードが実行された時点で、自分自身をオブジェクトにアタッチしようとします。このコード行の実行時にオブジェクトが存在しない場合、イベント ハンドラーは作成されません。

次のようなイベント ハンドラ:

 $(document).on('click','#linked',function(e){

委任されたイベント ハンドラーです。イベント ハンドラはdocument常に存在する要素に関連付けられるため、いつでも関連付けることができます。次に、実際に他の要素で発生したイベントのイベント伝播に依存して要素にバブルアップしdocument、イベントハンドラーがイベントを確認すると、それがどの要素で発生したかを調べて一致するかどうかを確認し"#linked"ます. これにより、"#linked"イベント ハンドラーに影響を与えることなく、コンテンツを前後に移動したり、後で作成したりできます。


そのため、イベント ハンドラーが必要な動的に挿入されたコンテンツを処理する場合、いくつかのオプションがあります。

  1. コンテンツを DOM に挿入してから、イベント ハンドラーをアタッチできます。
  2. 委任されたイベント処理を使用して、イベント ハンドラーを静的な親オブジェクトにアタッチし、委任された形式を使用し.on()て、動的に検索する子セレクターを指定できます。

委任されたイベント処理の詳細については、このトピックに関する他の投稿を参照してください。

動的htmlをロードした後にクリックイベントを追加するためのjQuery .live()と.on()メソッド

jQuery.on() は、イベント ハンドラーの作成後に追加された要素に対して機能しますか?

JQuery イベント ハンドラー - 「最良の」方法とは

Javascript のイベント委譲を極限まで行ってみませんか?

于 2014-10-17T01:44:02.143 に答える