除非在页脚中执行,否则脚本不起作用

时间:2012-06-06 17:09:17

标签: javascript jquery

这是一种奇怪的情况。尽管确保在它之前加载了所有的依赖项(在我的情况下它只是jQuery库),但我的脚本在head部分(即<head>)中加载时不起作用,但在加载时它的作用是页脚(在</body>标记之上的某处)。

由于这个不够明确,让我举一个现实的例子。 This is the web page。现在,查看页面的来源,在那里,这是我正在谈论的代码。

<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 个答案:

答案 0 :(得分: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/