Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正确加载页面后检查div属性_Javascript_Jquery - Fatal编程技术网

Javascript 正确加载页面后检查div属性

Javascript 正确加载页面后检查div属性,javascript,jquery,Javascript,Jquery,现在有几次我想在页面加载时检查元素大小。我一直在使用$document.ready;,但我们发现,这些属性通常为null。如果使用$window.load;,情况也是如此 为了解决这个问题,我使用了一些技巧,如果没有设置元素,我会递归地调用函数 问:在专业性方面有更好的方法吗 var makeMusic = { init: function() { if ($('#bloc-1').height() == null) { setTimeout(f

现在有几次我想在页面加载时检查元素大小。我一直在使用$document.ready;,但我们发现,这些属性通常为null。如果使用$window.load;,情况也是如此

为了解决这个问题,我使用了一些技巧,如果没有设置元素,我会递归地调用函数

问:在专业性方面有更好的方法吗

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元素的。。。