jquery html回调

jquery html回调,jquery,html,callback,Jquery,Html,Callback,是否有html()函数的回调函数,或者是否有方法检查它是否已完成。例如: $("#some_div").html('something here'); if($("#some_div").html() == ''){ //do something here } 我正在设置一篇文章中某个元素的html。有时它不加载,所以当它不加载时,我想让它做一些事情,这是可能的。按照我现在的方式,它总是做另一件事,因为它在检查是否有html时没有设置html。希望有人有比我更好的解决方案。一个快速的解决方法

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

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

if($("#some_div").html() == ''){
//do something here
}

我正在设置一篇文章中某个元素的html。有时它不加载,所以当它不加载时,我想让它做一些事情,这是可能的。按照我现在的方式,它总是做另一件事,因为它在检查是否有html时没有设置html。

希望有人有比我更好的解决方案。一个快速的解决方法是使用setTimeout()延迟下一次调用,给HTML块足够的加载时间(因为加载时间非常小)

$('some#div').html('some content');
//将超时设置为250毫秒
设置超时(callbackFunction,250);
函数callbackFunction(){
//做些很酷的事
}
但是,请注意,如果要将任何变量传递给函数,可以执行以下操作:

$('#some_div').html('<div>some content</div>');
// set timeout for 250 milliseconds
var myParam = 'value';
setTimeout(function() { callbackFunction(myParam); }, 250);

function callbackFunction(myParam) {
    // do some cool sh*t
    alert(myParam);
}
$('some#div').html('some content');
//将超时设置为250毫秒
var myParam='值';
setTimeout(function(){callbackFunction(myParam);},250);
函数调用函数(myParam){
//做些很酷的事
警报(myParam);
}
html()
是一个同步操作。DOM的实际更新取决于html内容是什么。如果您有
标记,则加载它们需要时间。
html()
后面的下一条语句应该立即看到新的html内容

你的意思是不是改为
load()


[Edit]根据您的评论,可能是您的
$。ajax
失败了。不是
html()
。尝试将失败处理程序附加到ajax调用,然后重试?尽管如此,如果您的服务器端代码以200代码静默失败,则不会调用失败事件。在这种情况下,可以先验证html值,然后再将其设置为元素。

我在live和callback中找到的唯一方法

$('p').live('click', function() {
    // delay dont work with html() // fcallback function
    $(this).parent('div').slideUp('slow', function() {
      // empty block
      $(this).html('');
       if($(this).html()==''){
         // function
         myFunction();
       }
    });
});

契丹·萨斯特里的答案(现在最高的答案)不是100%正确。

$('#some_div').html('<div id="new_div">some content</div>'); // code 1    
$('#new_div').click(function(){ }); //code 2
$('some_div').html('some content');//代码1
$('#new_div')。单击(function(){})//代码2
我不知道为什么,但在某些情况下,代码2将在代码1完成之前执行。代码1和代码2之间的时间短于0毫秒。它应该是Javascript中的一些特殊执行命令

您必须使用cballou的方法(现场答案==!)来解决问题。e、 g

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);
var sync=函数(fn,毫秒){
var m=毫秒?毫秒:0;//从表面上看,0就足够了
返回设置超时(fn,m);
};
$('some_div').html('some content');//代码1
var code2=函数(){
$('#new_div')。单击(function(){});//在此处运行代码2
};
同步(代码2);

这不会真正起作用,因为如果post花费的时间超过我设置的超时时间,它将失败,但感谢您的帮助。您应该在post回调中设置html。ajax请求不在您最初的问题中。这是一个糟糕的做法,因为它不是动态的。是的,这实际上是一个解决方案,我遇到了相同的问题,在append之后运行函数,html在append之后运行。我必须对函数执行毫秒超时。它不是完美的,但它至少会在插入html后立即停止第二行的运行。这里甚至不应该有竞争条件。你有更多的代码可以显示,这样我们就可以重现问题?一个竞争条件?代码要比这复杂得多,但这基本上只是将html从post回调设置为success事件。so$.ajax({success:function(){//在此处设置html}});但是,有时它无法显示html,因此我只想让它再次运行函数来显示它,但我将限制它仅尝试3次,如果失败,则在添加带有.html()的html后,它们将被删除,DOM没有同步更新,这就是为什么不能在同一代码执行中调用该项的原因。要查看此代码,请运行以下代码:$(“#some_div”).html(“”);console.log($(“#newDiv”).length);长度将为0,因为元素尚不存在。因此,使用一个间隔作为回调:var myInterval=setInterval(function(){if($(“#newDiv”).length){clearInterval(myInterval);MY_function();},10)//每10毫秒+1运行一次。从ngreenwood6对自己问题的评论来看,ajax调用就是问题所在。ajax调用没有问题。它运行得非常好,我正在firebug中观看。只是有时候它会完成并向我显示firebug中的数据,但数据不在那里。不,我没有使用负载。我发布到一个php页面,然后调用我的数据库类,然后将数据从数据库返回给用户。BipedalShark我想你不知道你在说什么……你试图让我使用无限循环,你删除了你的帖子。在我的辩护中,我立即声明这是一个廉价的黑客行为。我删除了它,因为你问题的前提是可疑的。正如Chetan Sastry指出的,html()方法是同步的。不需要回调。正如我所说的,ajax没有失败。我向它添加了一个错误事件,但它从未执行过。另外,当我查看firebug中的响应时,它包含了信息。
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);