jquery html() callback


  通過JQuery的.html()函數我們可以非常方便地加載一段HTML到指定的元素中,例如給<div></div>中放入一組圖片。問題是JQuery的.html()函數是同步的,如果我們想知道HTML被加載之后容器的高,例如獲取容器的offsetHeight或scrollHeight屬性的值,必須要等HTML元素中所有的內容都加載完畢后才能獲取到真實的值,尤其是HTML中包含有image標簽時。那如何才能實現.html()函數的回調方法呢?答案是使用前端的Q.

  對應的代碼如下:

var defer = Q.defer();
var realHtml = $('#html-canvas');
realHtml.html(html);
var contentImages = $("#html-canvas img");
var totalImages = contentImages.length;
var loadedImages = 0;
if (contentImages.length === 0) defer.resolve();
else {
    contentImages.each(function(){
        $(this).on('load', function(){
            loadedImages++;
            if(loadedImages == totalImages)
            {
                defer.resolve();
            }
        });
    });
}
return defer.promise.then(function () {
    console.log('all done.');
});

  首選通過JQuery選擇器找到容易中已加入HTML的所有img元素,然后給所有img元素添加onLoad事件,並判斷是否所有img元素的onLoad事件是否都已經觸發(loadedImages == totalImages)。然后通過defer.resolve()來通知Q的promise已完成異步操作,然后在.then()函數中就可以繼續下一步操作了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM