2

我试图寻找答案,但我的措辞与使用 jQueryon()方法寻找事件委托的问题太相似了。因此,请不要对我的问题的措辞感到困惑。

鉴于我编写 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

假设添加代码时包装器存在于 DOM 上,请尝试:

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

这对我有用 jsFiddle

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

这就是我将如何在一行中做到这一点: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 回答
0

我认为您可以通过一些技巧将这些方法链接起来以获取刚刚创建的孩子:

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

它很丑,但它似乎有效,我不确定它是否可以根据您的需要进行扩展

于 2013-03-01T20:15:25.967 回答