脚本只有在页脚执行时才能正常工作。

3
这是一个奇怪的情况。尽管我确保所有依赖项(在我的情况下只有jQuery库)都在它之前加载,但当在头部部分加载脚本时(即<head>),它不起作用;而当在页脚(在</body>标记上方的某个位置)加载时则正常工作。
为了更清晰地说明,让我们看一下实际例子。请访问 这个网页。现在查看页面源代码,在其中,这就是我所说的代码。
<script type='text/javascript'>
/* <![CDATA[ */
var yjlSettings = {"gifUrl":"http:\/\/whatthenerd.com\/wp-content\/themes\/reddlec\/images\/ajax-loader.gif","autoGrow":"enable"};
/* ]]> */
</script>
<script type='text/javascript' src='http://whatthenerd.com/wp-content/themes/reddlec/js/no-reload-comments.js?ver=3.3.2'></script>

它的作用是允许用户在不重新加载页面的情况下发布评论。(请随意在页面上测试评论:))——但它并没有实现。为什么?
PS:就像我之前说的那样,当上述脚本加载到</body>标记之前时,一切都正常工作。我真的看不出可能会导致冲突的原因。

1
脚本可能需要尚未加载的元素(即<body>内的任何内容)。--太晚了! - Rudie
1
@Rudie 太晚了! 是啊,但完全没有问题。我今天学到了非常重要的东西! :D - its_me
1个回答

5
您的脚本立即在DOM中查找元素:
var $commentlist = jQuery('.commentlist');
var $respond = jQuery('#respond');
jQuery(document).ready(function($) {
  // Code using $ as usual goes here.
});

这使得在页面顶部加载代码时变得更加安全,通过延迟执行代码直到文档完全加载并构建DOM来实现。
想要了解更多关于ready的信息,请访问以下网址:http://api.jquery.com/ready/

你认为这样做会更好吗?jQuery(document).ready(function($){ /* 我的代码在这里 */ }); - its_me
1
去找那个编写脚本的人大喊大叫 :-P - gen_Eric
1
@AahanKrish 当然没问题,尤其是当你使用.noConflict时。 - Sampson
1
@Rocket 哈哈!这是一个WordPress插件,它确实在页脚加载文件。但是当我只需要一些JS代码时,使用插件就有些浪费了。从中裁剪出所有这些问题... :D - its_me
@JonathanSampson 最后一个问题:我应该将整个代码包装在 此文件 中,使用 jQuery(document).ready(function($) {... 还是只需使用以 var $commentlist=jQuery('.commentlist').... 开头的第二个代码块? - its_me
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接