你有多个$(document).ready(function(){...}); 板块?

leo*_*ora 237 jquery

如果我在启动时有很多功能,那么它们都必须在一个单一的下面:

$(document).ready(function() {
Run Code Online (Sandbox Code Playgroud)

或者我可以有多个这样的陈述?

kar*_*m79 285

你可以有多个,但并不总是最好的事情.尽量不要过度使用它们,因为它会严重影响可读性.除此之外,它是完全合法的.见下文:

http://www.learningjquery.com/2006/09/multiple-document-ready

试试这个:

$(document).ready(function() {
    alert('Hello Tom!');
});

$(document).ready(function() {
    alert('Hello Jeff!');
});

$(document).ready(function() {
    alert('Hello Dexter!');
});
Run Code Online (Sandbox Code Playgroud)

你会发现它等同于此,请注意执行的顺序:

$(document).ready(function() {
    alert('Hello Tom!');
    alert('Hello Jeff!');
    alert('Hello Dexter!');
});
Run Code Online (Sandbox Code Playgroud)

还值得注意的是,在一个$(document).ready块中定义的函数不能从另一个$(document).ready块调用,我只是运行了这个测试:

$(document).ready(function() {
    alert('hello1');
    function saySomething() {
        alert('something');
    }
    saySomething();

});
$(document).ready(function() {
    alert('hello2');
    saySomething();
}); 
Run Code Online (Sandbox Code Playgroud)

输出是:

hello1
something
hello2
Run Code Online (Sandbox Code Playgroud)

  • 在使用多个$(document).ready()语句时依赖执行顺序是不明智的.每个人都需要独立执行任何已经执行过的人. (25认同)
  • @karim79肯定这个(OP的问题)最适用于编写一个具有多个启动问题的复杂代码 - 即一些代码在加载完成时总是*运行,而某些代码只在某些内容节点上需要?在这种情况下,上下文应该是孤立的,执行顺序应该是无关紧要的 - 能够分配给'DOM ready'事件而不覆盖前一个事件成为一个有用的功能,无论排序行为如何. (7认同)
  • 我认为它的行为是这样的,因为它将函数添加到可以全局访问的窗口对象.否则它是一个声明函数,本地作用于该就绪函数. (2认同)

Mic*_*kel 18

你可以使用多个.但是你也可以在一个document.ready中使用多个函数:

$(document).ready(function() {
    // Jquery
    $('.hide').hide();
    $('.test').each(function() {
       $(this).fadeIn();
    });

    // Reqular JS
    function test(word) {
       alert(word);
    }
    test('hello!');
});
Run Code Online (Sandbox Code Playgroud)

  • 只是试图说,有时,其他人会在页面上附加已经声明文档就绪功能的书面模块,因此您可能无法将所有代码移动到一个函数中(这被认为是理想的).我也会担心在这里有太多的东西,因为我们会得到On Ready Bloating,这会使代码同样难以维护. (2认同)

pje*_*esi 15

是的,你可以轻松拥有多个街区.请注意它们之间的依赖关系,因为评估顺序可能不是您所期望的.


JW.*_*JW. 11

是的,可以有多个$(document).ready()调用.但是,我认为你不知道他们将以何种方式执行.(资源)

  • 在添加的订单中调用 (14认同)

小智 5

是的,这是可能的,但你可以更好地使用div #mydiv并使用它们

$(document).ready(function(){});

//and

$("#mydiv").ready(function(){});
Run Code Online (Sandbox Code Playgroud)

  • 不支持使用div.如果出于某种原因你这样做,你需要自担风险:[.ready()方法只能在与当前文档匹配的jQuery对象上调用](http://api.jquery.com/ready/) (3认同)
  • 有趣的想法,但为什么它更好? (2认同)