Javascript 正确加载页面后检查div属性
现在有几次我想在页面加载时检查元素大小。我一直在使用$document.ready;,但我们发现,这些属性通常为null。如果使用$window.load;,情况也是如此 为了解决这个问题,我使用了一些技巧,如果没有设置元素,我会递归地调用函数 问:在专业性方面有更好的方法吗Javascript 正确加载页面后检查div属性,javascript,jquery,Javascript,Jquery,现在有几次我想在页面加载时检查元素大小。我一直在使用$document.ready;,但我们发现,这些属性通常为null。如果使用$window.load;,情况也是如此 为了解决这个问题,我使用了一些技巧,如果没有设置元素,我会递归地调用函数 问:在专业性方面有更好的方法吗 var makeMusic = { init: function() { if ($('#bloc-1').height() == null) { setTimeout(f
var makeMusic = {
init: function() {
if ($('#bloc-1').height() == null) {
setTimeout(function() {
makeMusic.init() ########## THIS IS THE HACK ##########
}, 10)
} else {
makeMusic.height = $('#bloc-1').height();
makeMusic.width = $('#bloc-1').width();
}
makeMusic.watchExperience();
},
watchExperience: function() {
//Some stuff
}
}
var Main = {
run: function() {
makeMusic.init();
}
}
$(document).ready(Main.run());
你根本不需要黑客。这里的问题是在触发document.ready之前调用Main.run函数。你应该:
$(document).ready(Main.run);
而不是
$(document).ready(Main.run());
当您添加到函数名时,interpeter会在到达该行时立即调用它
传递回调时,您应该只传递对函数的引用。就专业性而言,我认为最好将代码放在如下名称空间中:
var app = window.app || {};
app.set = {};
app.set.makeMusic = (function(){
// private members
this.height = "";
this.width = "";
var init = function() {
height = $('#bloc-1').height();
width = $('#bloc-1').width();
alert(height + " " + width);
};
//public interface
return {
init: init
};
})(); // self invoked
$(function(){
app.set.makeMusic.init();
});
特别的我想到的唯一一件事,但可能不是:这些元素也在doc.ready上创建了吗?我明白了,所以在本例中,Main.run之前就被调用了。ready?是的,只要interpeter到达doc.ready行,Main.run就被调用了,已计算并将其返回值传递到document.ready function因此,您没有将函数对象传递给它以进行回调,而是传递了null,因为Main.run没有返回值return init函数在这里究竟做了什么?选择器是如何处理函数的?我本以为这是针对html元素的。。。