jquery html回调

ngr*_*od6 14 html jquery callback

是否有html()函数的回调或检查它已完成的方法.例如:

$("#some_div").html('something here');

if($("#some_div").html() == ''){
//do something here
}
Run Code Online (Sandbox Code Playgroud)

我从帖子中设置元素的html.有时候它没有加载,所以当它没有加载我想它做某事,这是可能的.我现在拥有它的方式总是做另一件事,因为它检查它有html时没有设置html.

Che*_*try 18

html()是一个同步操作.DOM的实际更新取决于您的html内容.如果你有<img><iframe>标签,他们将需要时间来加载.下面的语句html()应该立即看到新的html内容.

你的意思是load()吗?

[编辑]根据你的评论,这可能是你的$.ajax失败.没有html().尝试将失败处理程序附加到ajax调用并从那里重试?但是,如果您的服务器端代码以200代码静默失败,则不会调用失败事件.在这种情况下,您可以在将html值设置为元素之前验证它.


Did*_*eke 6

Chetan Sastry的回答(现在最高的答案)并非100%正确.

$('#some_div').html('<div id="new_div">some content</div>'); // code 1    
$('#new_div').click(function(){ }); //code 2
Run Code Online (Sandbox Code Playgroud)

我不知道为什么,但在某些情况下,代码2将在代码1完成之前执行.代码1和代码2之间的时间短于0毫秒.它应该是Javascript中的一些特殊执行命令.

你必须使用cballou的方式(楼层答案= _ =!)来解决问题.例如

var sync = function(fn, millisec){
    var m = millisec ? millisec : 0; //in face, 0 is enough
    return setTimeout(fn,m);
};

$('#some_div').html('<div id="new_div">some content</div>'); // code 1    
var code2 = function(){
    $('#new_div').click(function(){ }); // run code 2, here
};

sync(code2);
Run Code Online (Sandbox Code Playgroud)