Javascript 创建后立即访问元素(无setTimeout)
我试图寻找这个问题的答案,但我的措辞与使用jQueryJavascript 创建后立即访问元素(无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
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');