使用jQuery从$(window).load和$(document).ready更改/传递变量

时间:2014-08-01 19:23:18

标签: jquery

我正在尝试使用jQuery将全局变量的值传递给 $(window).load $(document).ready

为什么以下代码不会生成包含值'aaa'的警告框? - 我该如何实现这一目标?

我需要在文档加载时计算具有某个类的元素数,然后在页面准备好后,使用该值来发布操作。

var globalVariable = 'somevalue';

$(window).load(function() {
    globalVariable = 'aaa';
})

$(document).ready(function() {
    // globalVariable = 'bbb';
    alert(globalVariable);
})

编辑:如何检测某个元素当前是否正在悬停,或者在页面加载时是否有某个类,然后在页面准备就绪时执行操作,具体取决于是否该类存在或元素当前正在盘旋?

2 个答案:

答案 0 :(得分:3)

您正在传递它,但window.onload通常在document.ready之后触发,这就是为什么它没有被更改。

来自ready

的文档
  

虽然JavaScript在呈现页面时提供了执行代码的window.onload事件,但在完全接收到所有资产(如图像)之前,此事件不会被触发。

     

在大多数情况下,只要完全构建DOM层次结构,脚本就可以运行。

var globalVariable = 'somevalue'; // executes first, sets the variable

$(window).load(function() {       // executes last, when all assets are loaded
    globalVariable = 'aaa';
});

$(document).ready(function() {    // executes second, alerts 'somevalue'
    alert(globalVariable);
});

  

我需要在文档加载时计算具有某个类的元素数,然后在页面准备好后,使用该值来发布操作。

看起来你应该真正需要的是

$(function() {
    var number_of_elements = $('.class').length;
});

没有必要等待window.onload计算元素。


编辑:

  

如何检测元素当前是否正在悬停,或者在页面加载时是否具有某个类,然后在页面准备就绪时执行操作,具体取决于类是否存在或元素当前是否存在徘徊过来?

$(function() {

    $(document).on('mousemove', function(e) {

        if ( $(e.target).is('.someClass') && $('.some_other_class').length ) {
             // do stuff
        }

        // remember to remove this handler once done

    });

});

我认为这与你得到的一样接近,因为你只能在鼠标移动后捕捉悬停的元素。
这将检查:

  • 如果当前悬停的元素e.target匹配某些内容,在本例中为类
  • 如果DOM中有任何类.some_other_class的元素

答案 1 :(得分:1)

$(document).ready等待所有元素在触发之前放在DOM上。

$(window).load等待所有元素都加载到DOM中(图像完成加载)。

因此,文档就绪方法将始终在窗口加载之前触发,因为元素被放置在树中然后它们被加载