如何在调用另一个函数之前等待div加载?
var href; $(function(){ $("a.load").click(function (e) { e.preventDefault(); href = this; // cover all bookmarks $("."+($(this).attr("class"))).css('border-bottom', 'solid 1px black'); $("."+($(this).attr("class"))).css('background-color', '#F5F5F5'); // uncover chosen bookmark $("#"+($(this).attr("id"))).css('border-bottom', 'solid 2px white'); $("#"+($(this).attr("id"))).css('background-color', 'white'); $("#tempMain").load($(this).attr("href")); // load content to temp div setTimeout(function() {resizeDivs();}, 500); // synchronize size of #main and #rightColumn }); }); function resizeDivs() { var heightNew = $("#tempMain").css("height"); $("#rightColumn").css('height',heightNew); $("#main").css('height',heightNew); // $('#main').load($(href).attr('href')); $("#main").html($("#tempMain").html()); // is faster than loading again }
我正在通过jQuery函数将子页面加载到我的主页面的选定div中。 为了同步主div和右列的高度,我使用的是jQuery的.css()
方法。 我希望resize看起来很顺利,所以我已经解决了以下步骤:
1.将子页面的内容加载到不可见的临时div。
2.计算临时div的高度。
3.将主div和右列的高度更改为该临时div的高度。
4.将子页面的内容加载到主div。
但是,我知道我目前这样做的方式非常蹩脚,因为使用setTimeout()
作为等待内容加载的即兴创作 – 我尝试过使用$(document).ready
但没有运气。 使用全局变量( var href
)似乎也不是艺术,但传递$("a.load").click
运算符$("a.load").click
apply()
函数$("a.load").click
函数也不起作用。
怎么做“正确”的方式?
使用加载回调
$("#tempMain").load($(this).attr("href"),function(){ resizeDivs(); // do other stuff load is completed });
用jquery
function waitForElement(elementPath, callBack){ window.setTimeout(function(){ if($(elementPath).length){ callBack(elementPath, $(elementPath)); }else{ waitForElement(elementPath, callBack); } },500) }
例如使用:
waitForElement("#myDiv",function(){ console.log("done"); });
这里没有jquery
function waitForElement(elementId, callBack){ window.setTimeout(function(){ var element = document.getElementById(elementId); if(element){ callBack(elementId, element); }else{ waitForElement(elementId, callBack); } },500) }
例如使用:
waitForElement("yourId",function(){ console.log("done"); });
您可以在jQuery load
函数中附加回调:
$("#tempMain").load($(this).attr("href"), resizeDivs);
见: http : //api.jquery.com/load/