jquery html()回调函数

wal*_*mik 28 html jquery image

这个问题已被问过几次,但没有以这样的方式回答它可以帮助我解决我的具体问题.从导航列表中,单击一个项目,我将使用该.html()函数将一些HTML内容加载到div中.没有ajax请求.HTML内容包含图像.因此,加载可能需要一些时间.由于.html()是同步操作,下一行将立即执行.

一旦我使用加载内容.html(),我就启用了名为tinyscrollbar的第三方自定义滚动条.如果加载的内容具有图像,则滚动条会比加载图像更早地计算内容div的高度,从而导致滚动条不会一直滚动.

我不想用.setInterval().这有解决方案吗?在jQuery中是否有一些其他函数像.html()函数一样但具有某种回调功能?

谢谢.

Deb*_*Deb 47

$('#divId').html(someText).promise().done(function(){
    //your callback logic / code here
});
Run Code Online (Sandbox Code Playgroud)

  • 这个答案有误导性.`.html()`是同步的.`.promise().done()`不等待`.html()`方法完成.相反,它只是运行的事件循环,类似于会发生什么的旁边剔回调,如果你使用'的setTimeout(yourLogicFunction,0)`.它可能"有效",但它不是在等待`.html()`来完成. (7认同)
  • 小心地链接到(我假设)你的博客与其他一些信息,例如你的类似答案[这里](http://stackoverflow.com/questions/1773875/jquery-html-callback/18032659#18032659).它可以被视为垃圾邮件. (4认同)

wal*_*mik 10

基于迈克罗宾逊的(和dystroy的)建议,我的问题的答案是:

$("#myContentDiv").html('HTML content comes here');
var contentImages = $("#myContentDiv img");
    var totalImages = contentImages.length;
    var loadedImages = 0;
    contentImages.each(function(){
        $(this).on('load', function(){
            loadedImages++;
            if(loadedImages == totalImages)
            {
                $("#myContentDiv").tinyscrollbar();
            }
        });
    });
Run Code Online (Sandbox Code Playgroud)