jQuery $(document).ready() 没有触发

12

使用从谷歌托管的代码中获取的jQuery 1.4.2。

以下JavaScript为什么在文档准备就绪时不会启动所有3个document.ready函数呢?

第一个$(document).ready()函数用于渲染标题,第二个函数用于触发'Foo'提示框,但后续位于新<script>块中的函数未被触发。

<script type="text/javascript">
    $(document).ready(function () {
        Cufon.replace('h1'); // Works without a selector engine
        Cufon.replace('h2'); // Works without a selector engine
        Cufon.replace('h3'); // Works without a selector engine
        Cufon.now();
    });
    $(document).ready(function () { alert("Number Foo"); });
</script>

// html tags

<script type="text/javascript">
    $(document).ready(function () { alert("Number One"); });
    $(document).ready(function () { alert("Number Two"); });
</script>

这些内容在 SharePoint2010 的同一页面上,以单独的 Web 部件进行托管。


4
我会小心地定义一个文档就绪函数在另一个文档就绪函数中。 - Phil
1
抱歉,是打错了。已更新帖子。 - Darbio
3
最后一个$(document).ready函数没有正确的结束。缺少}); - Carlos Muñoz
好的发现,但那不是问题所在... - Darbio
将jQuery完整地托管在本地,然后在ready迭代器内放置一个调试器语句,亲自查看。我怀疑您一定有错误,但如果没有更多的源代码,就无法看到。 - redsquare
1
每个脚本标签都在单独的 Web 部件中吗?我们以前不知道这一点。问题本身并不在脚本中。您页面中的其他东西破坏了您的代码。 - Carlos Muñoz
3个回答

23

我可以想到三件与法医学有关的事情:

  1. 尝试使用非Google托管的库。
  2. 注释掉Cufon调用 - 我相信Cufon会下载其他资源,这可能会干扰。
  3. $(document).ready()回调定义中的一个或多个替换为$(window).load()。它们有不同的触发条件 - $(window).load()等待一切加载完成,但这种替换可能会揭示问题所在。

当然,在这种情况下,console.log()alert()将成为您代替调试器断点的最好伙伴。


1
Cufon是罪魁祸首...已移除! - Darbio
4
$(window).load() 这个提示帮了我! - YeahStu
1
如果 $(window).load() 能够正常工作,但 $(document).ready() 不能,那这是什么意思呢? - CharlieMezak
@CharlieMezak:你的脚本是否依赖于已加载的资源(如图像)?我相信$(document).ready()回调会在文档的所有脚本、CSS和HTML加载完毕后触发,而不必等待图像和其他引用。 - fish2000
2
我改用$(window).load()后问题解决了,但我不知道为什么。如果有人能提供任何线索那就太好了。 - Andy

1

你在第二个脚本标签中缺少一个闭合的花括号和括号


不,这不是问题。 - Darbio
你是从一开始就输错了代码还是在看答案后改正的? - Carlos Muñoz
我在问题的评论中,就在你第一次回答之前进行了更改。 - Darbio

1

你在最后一个 $(document).ready 中缺少了 });

一旦你纠正了这个问题,它就应该可以工作了。

编辑: 由于你现在说每个脚本标签都在单独的 Web 部件中,我相信问题本身不在脚本中。你页面中的其他东西正在搞乱你的代码。


这不是问题,因为我已经修复了源代码,但它仍然无法正常工作。 - Darbio

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