2

on()これに対する回答を検索しようとしましたが、私の言い回しは、jQueryメソッドを使用してイベント委任を探している質問に似すぎています。したがって、私の質問の文言に惑わされないでください。

jQueryアプリケーションを書いた経験から、実際にこの質問をしていることを恥ずかしく思いますが、これに対する答えを実際には知らないことを告白しなければなりません:-(

このことを考慮:

// Create the div
$('#wrapper').prepend('<div id="test"></div>');

// Add content to the div, and attach events
// Only execute it once the div has been created though, so wait 20 milliseconds
setTimeout(function(){

    // Add some button
    $('#test').html('<button></button>');

    // Add an event to the button
    // ... after 20 milliseconds
    setTimeout(function(){

        // Attach the click event
        $('#test button').click('dosomething');
    });
},20);

上記のコードではsetTimeout、要素を選択してコンテンツやイベントなどを追加する前に、要素が作成されていることを確認するために使用する必要がありました...

私の質問は、非常に簡単に言えば、これを行うためのより良い方法はありますか? タイムアウトなし?

上記の正確なコードを書くためのより良い方法はありますか?指定された理由でタイムアウトの使用を回避する方法があるかどうかを知りたいだけです。

4

5 に答える 5

2

これは役に立ちます。

 var _b = $('<button></button>');
    $('#wrapper').prepend(_b);
    _b.click(function(){
     ///do something
    });
于 2013-03-01T20:06:56.203 に答える
0

少しハックしてメソッドをチェーンして、子を作成することができると思います。

$('#wrapper').prepend('<div id="test"></div>').children('#test').html('<button></button>').children('button').click('dosomething');

醜いですが、うまくいくようです。ニーズに合わせて拡張できるかどうかはわかりません。

于 2013-03-01T20:15:25.967 に答える
0

これは私にとってはうまくいきます

var $test = $('<div id="test"></div>');
  , $button = $('<button></button>')
$test.append($button);

$button.click(function() {
  console.log('here');
});

$('#wrapper').prepend($test);
于 2013-03-01T20:05:58.673 に答える
0

コードを追加するときにラッパーがDOMに存在すると仮定すると、次を試してください。

$('#wrapper').on('click', '#test button', doSomething)
于 2013-03-01T20:02:48.207 に答える
0

これは私が一行でそれを行う方法です:http://fiddle.jshell.net/4rT6s/1/

$(function(){
    $('<button type="button">Click!</button>').click(function(){alert('click');}).appendTo($('<div id="test" />').appendTo('#wrapper'));
});
于 2013-03-01T20:09:53.683 に答える