Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 创建后立即访问元素(无setTimeout)_Javascript_Jquery_Timeout - Fatal编程技术网

Javascript 创建后立即访问元素(无setTimeout)

Javascript 创建后立即访问元素(无setTimeout),javascript,jquery,timeout,Javascript,Jquery,Timeout,我试图寻找这个问题的答案,但我的措辞与使用jQueryon()方法寻找事件委派的问题太相似了。因此,请不要对我问题的措辞感到困惑 鉴于我编写jQuery应用程序的经验,我很惭愧地问了这个问题,但我必须承认,我实际上不知道这个问题的答案:-( 考虑这一点: // Create the div $('#wrapper').prepend('<div id="test"></div>'); // Add content to the div, and attach event

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

鉴于我编写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);
//创建div
$('#wrapper')。前缀('');
//将内容添加到div,并附加事件
//但是,只在创建div后执行它,所以请等待20毫秒
setTimeout(函数(){
//添加一些按钮
$('#test').html('');
//将事件添加到按钮
//…20毫秒后
setTimeout(函数(){
//附加单击事件
$(“#测试按钮”)。单击('dosomething');
});
},20);
在上面的代码中,我必须使用
setTimeout
来确保在选择元素并添加内容、事件等之前已经创建了元素

我的问题很简单,有没有更好的方法做到这一点?没有超时


请注意,我的意思不是说,有没有更好的方法来编写上面的确切代码?我只是想知道是否有方法可以避免由于指定的原因而使用超时。

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

$('#wrapper').on('click', '#test button', doSomething)
这对我有用

var$test=$('');
,$按钮=$('')
$test.append($button);
$按钮。单击(函数(){
console.log('here');
});
$('#wrapper')。prepend($test);
这可能会有所帮助

 var _b = $('<button></button>');
    $('#wrapper').prepend(_b);
    _b.click(function(){
     ///do something
    });
var\u b=$('');
$(“#包装器”).prepend(_b);
_b、 单击(函数(){
///做点什么
});

我将在一行中这样做:

$(函数(){
$('Click!').单击(函数(){alert('Click');}).appendTo($('').appendTo('#wrapper');
});

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

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

它很难看,但似乎可以工作,我不确定它是否可以根据您的需要进行扩展

“在选择元素并添加内容、事件等之前,我必须使用
setTimeout
确保元素已创建。”不,你不知道。也许我不知道中间创建的需要什么,为什么你不能在上使用?@系统很有趣,这就是我最初编写代码的方式,但它不起作用!它只在我插入超时时起作用。这就是为什么我如此困惑的原因!!!:-(添加新的子项或HTML是同步操作,因此您不需要任何超时。@系统正常,将尽我所能。我的应用程序非常大,这只是一个小片段。可能需要一些时间来创建一个工作JSFIDLE。感谢您迄今为止的帮助。我很高兴您同意没有必要超时……请阅读问题,我不是在寻找事件委派。我很清楚如何实现这一点!因此,如果您不需要事件委派,您需要什么?倾听DOM中的更改?您对此有何想法:不需要
,jQuery将使用
$('')为您创建元素
感谢您的帮助,当我能够在JSFIDLE中重新创建确切的问题时,我会回来。它现在似乎正在工作,无法理解为什么,因为它肯定不是以前的…感谢您的帮助,当我能够在JSFIDLE中重新创建确切的问题时,我会回来。它现在似乎正在工作,无法理解为什么,因为它肯定是asnt之前…感谢您的帮助,当我能够在JSFIDLE中重新创建确切的问题时,我会回来。它现在似乎正在工作,无法理解为什么,因为它肯定不是以前的问题…感谢您的帮助,当我能够在JSFIDLE中重新创建确切的问题时,我会回来。它现在似乎正在工作,无法理解它定义的原因以前真的不是。。。
$(function(){
    $('<button type="button">Click!</button>').click(function(){alert('click');}).appendTo($('<div id="test" />').appendTo('#wrapper'));
});
$('#wrapper').prepend('<div id="test"></div>').children('#test').html('<button></button>').children('button').click('dosomething');