加载HTML </div>后,无法在选择器中找到正确的<div>

时间:2009-05-08 21:50:13

标签: jquery asynchronous css-selectors callback

我希望我能找到解决方案。在这里:

在我提交表单以向数据库添加消息后,我使用load方法创建<div>。之后我在回调函数中做了一些事情。

当创建新<div>的函数完成后,它将返回到应该将消息添加到最后插入的<div>的调用函数。

这就是问题出现的地方:

我使用选择器查找$(someDiv : last),但它将其置于错误的<div>。所以,我知道它与异步过程有关。

我还没有找到解决这个问题的方法,因为现在我没有使用回调函数。

如果你想看到一个live example源代码以警报的形式混乱了调试代码,你可以看到它在做什么。

3 个答案:

答案 0 :(得分:1)

Ajax调用是异步的,您应该使用回调函数来选择加载的数据,例如:

$('div').load(url, data, function(data, status) {
   $(someDiv:last).dosomething();
} 

答案 1 :(得分:0)

可能新的div没有插入您认为的位置。 $(someDiv:last)返回错误的结果,因为新的div不在someDiv中,或者它不在最后。这似乎是Firebug易于调试的东西。

不是使用“last”元类来选择div,而是更好的想法:给新div一个ID并直接引用它。或者在创建它时给它一个类,使用类来选择它$(“。newdiv”),然后在完成后清除该类。或者只是将新div返回给调用函数,因此根本不需要使用选择器。对不起,我并不完全了解您的情况,但我认为其中至少有一种解决方案可行。

答案 2 :(得分:0)

您是否注意到第一次将值添加到第一个项目,之后它会被添加到之前的最后一个项目中?这可能是一个线索。 哦,我被困在一个循环中,它添加了我的消息10次。看起来你的代码有时间问题。

编辑:将其恢复到基础会看起来像这样:http://kruisit.nl/so/841982/ 希望有所帮助。