jQuery - 多个$(文档).ready ...?

rlb*_*usa 346 javascript jquery

题:

如果我链接两个带有$(document).ready函数的JavaScript文件,会发生什么?有人会覆盖另一个吗?或两者都$(document).ready被召唤?

例如,

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></script>

<script type="text/javascript" src="http://.../jquery1.js"></script>

<script type="text/javascript" src="http://.../jquery2.js"></script>
Run Code Online (Sandbox Code Playgroud)

jquery1.js:

$(document).ready(function(){
    $("#page-title").html("Document-ready was called!");
});
Run Code Online (Sandbox Code Playgroud)

jquery2.js:

$(document).ready(function(){
    $("#page-subtitle").html("Document-ready was called!");
});
Run Code Online (Sandbox Code Playgroud)


我确信最好将两个调用组合成一个单独$(document).ready但在我的情况下不太可能.

Pra*_*sad 338

一切都将被执行,并在第一次调用第一次运行的基础上!!

<div id="target"></div>

<script>
  $(document).ready(function(){
    jQuery('#target').append('target edit 1<br>');
  });
  $(document).ready(function(){
    jQuery('#target').append('target edit 2<br>');
  });
  $(document).ready(function(){
    jQuery('#target').append('target edit 3<br>');
  });
</script>
Run Code Online (Sandbox Code Playgroud)

演示如您所见,它们不会相互替换

还有一件事我想提一下

代替这个

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

你可以使用这个快捷方式

jQuery(function(){
   //dom ready codes
});
Run Code Online (Sandbox Code Playgroud)

  • 记得看到$(function(){// do stuff}); 这是第一次,谷歌的解释有多难?$(文件).ready为这么少的人沟通了很多...... (209认同)
  • 甚至更短的$(function(){// dom ready codes}); http://api.jquery.com/ready/ (63认同)
  • 对简洁,不易读的代码投票是对恐怖主义的投票. (54认同)
  • 我同意@MattM.我投票支持可读性. (19认同)
  • 快捷方式没有任何好处,但确实会造成混淆.如果您的目标是使您的代码在阅读,理解和维护所需的时间方面"更短",那么这些快捷方式将引领您走过漫长的道路. (10认同)
  • 如果使用快捷方式是邪恶的,那么应该使用`jQuery(document).ready(function(){});` (3认同)
  • 我同意,在编译语言中,简洁而不是可读通常是不好的。我不确定翻译语言。如果您担心端口80上的消息大小,则开始使用快捷方式似乎更合理。 (2认同)

小智 73

重要的是要注意每个jQuery()调用必须实际返回.如果在一个异常中抛出异常,则永远不会执行后续(不相关)调用.

无论语法如何,这都适用.您可以使用jQuery(),或者jQuery(function() {}),$(document).ready()无论您喜欢什么,行为都是一样的.如果早期的一个失败,后续的块将永远不会运行.

使用第三方库时,这对我来说是一个问题.一个库抛出异常,后续的库从未初始化任何东西.

  • 这已不再是这种情况.从jQuery 3.0开始,jQuery确保在一个处理程序中发生的异常不会阻止随后添加的处理程序执行.http://api.jquery.com/ready/ (10认同)
  • 这个。我刚刚花了一个小时来将问题缩小到这一点。我的一个 `$(document).ready` 调用抛出了一个错误,因此一个不同的 `$(document).ready` 函数从未被调用。这让我发疯。 (2认同)

Ed *_*yed 31

$(文件).就绪(); 与任何其他功能相同.一旦文件准备好就会触发 - 即装载.问题是当多个$(document).ready()被触发时,当你在多个$(document).ready()中触发相同的函数时会发生什么

//this
<div id="target"></div>

$(document).ready(function(){
   jQuery('#target').append('target edit 1<br>');
});
$(document).ready(function(){
   jQuery('#target').append('target edit 2<br>');
});
$(document).ready(function(){
   jQuery('#target').append('target edit 3<br>');
});

//is the same as
<div id="target"></div>

$(document).ready(function(){

    jQuery('#target').append('target edit 1<br>');

    jQuery('#target').append('target edit 2<br>');

    jQuery('#target').append('target edit 3<br>');

});
Run Code Online (Sandbox Code Playgroud)

两者的行为完全相同.唯一的区别是,虽然前者会达到同样的效果.后者运行速度会快一点点,并且需要更少的打字.:)

总之,只要有可能只使用1 $(文件).ready();

//老回答

它们都会按顺序被调用.最佳做法是将它们结合起来.但不要担心,如果它不可能.页面不会爆炸.


Dio*_*ane 21

执行是自上而下的.先到先得.

如果执行顺序很重要,请将它们合并.


Sco*_*ler 9

两者都会被调用,先到先得.看看这里.

$(document).ready(function(){
    $("#page-title").html("Document-ready was called!");
  });

$(document).ready(function(){
    $("#page-title").html("Document-ready 2 was called!");
  });
Run Code Online (Sandbox Code Playgroud)

输出:

准备好文件2被叫!