jQuery $(document).ready() 被触发两次。

76

我在网上搜索了很久,试图找出这里发生了什么事情,但是我没有得到一个确切的答案。

在我的网站上有一个$(document).ready,无论里面的代码是什么,它都会运行多次。

我已经阅读了关于jQuery的bug报告,了解到如果语句内部出现异常,.ready事件将被触发两次。然而,即使我有以下代码,它仍然运行两次:

$(document).ready(function() {
    try{    
        console.log('ready');
        }
    catch(e){
        console.log(e);
    }
});

在控制台中,我只看到“ready”被记录两次。是否可能另一个具有异常的.ready会引起问题?我的理解是所有.ready标记彼此独立,但我似乎找不到这个问题的根源所在?

以下是该网站的head块:

<head>
<title>${path.title}</title>
<meta name="Description" content="${path.description}" />
<link href="${cssHost}${path.pathCss}" rel="stylesheet" type="text/css" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript" charset="utf-8"><!----></script>
<script src="media/js/fancybox/jquery.fancybox.pack.js" type="text/javascript" ><!-- --></script>
<script src="/media/es/jobsite/js/landing.js" type="text/javascript" ><!-- --></script>
<script src="/media/es/jobsite/js/functions.js" type="text/javascript"><!-- -->    </script>
<script src="/media/es/jobsite/js/jobParsing.js" type="text/javascript" charset="utf-8"><!----></script>
<script src="/media/es/jobsite/js/queryNormilization.js" type="text/javascript" charset="utf-8"><!----></script>
<script src="${jsHost}/js/jquery/jquery.metadata.js" type="text/javascript" charset="utf-8"><!----></script>
<script src="${jsHost}/js/jquery/jquery.form.js" type="text/javascript" charset="utf-8"><!----></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.7/jquery.validate.min.js" type="text/javascript" charset="utf-8"><!----></script>
<script src="${jsHost}/js/jquery.i18n.properties-min.js" type="text/javascript" charset="utf-8"><!----></script>

<script type="text/javascript" charset="utf-8">

function updateBannerLink() {
    var s4 = location.hash.substring(1);
    $("#banner").attr('href','http://INTELATRACKING.ORG/?a=12240&amp;c=29258&amp;s4='+s4+'&amp;s5=^');
}

</script>
</head>

不用管 JSP 变量,但是你可以看到我只调用了 functions.js 文件一次(其中包含.ready 函数)。


2
有什么东西会导致页面刷新或第二次加载 - 像Firebug这样的调试工具还是其他什么东西? - Dylan Beattie
1
它只记录了一次对我来说 - Elliot Bonneville
你能提供一下你正在使用的jQuery版本以及出现问题的浏览器吗? - Victor
1
我猜测同样的代码被嵌入了两次。DOM准备就绪事件在DOM准备就绪时触发一次,ready处理程序只是绑定到该事件。如果绑定了两次,则会执行两次。也许您应该检查所有的JavaScript,看看这段代码是否在其他地方重复出现,或者您可能只是在某个其他处理程序中留下了一个控制台日志,而某些其他代码正在执行,但您只是留下了一个控制台日志。 - Alok Swain
这不是控制台日志留在某个地方的问题,而是这个特定的代码块运行了两次,我也没有看到任何可能调用页面刷新或页面加载的地方。这在除IE之外的所有浏览器中都会发生。 - Xenology
显示剩余2条评论
14个回答

0
在我的情况下,$(document).ready 会触发两次,因为 CSS 不好,检查你的 CSS 是否有 background-image: url(''); 的部分。

CSS 无法影响事件。 - Hexodus

-1
今天早上我遇到了这个问题......仔细检查了最近操作过的 jQuery 弹出框中的一些 HTML 代码之后,我发现我不小心删除了一个闭合的表格标签。我还没有完全理解为什么会导致 document.ready 函数被调用两次,但确实如此。添加闭合的表格标签解决了这个问题。
jQuery JavaScript 库 v1.8.3(是的,这是一个遗留的应用程序)。

-1
我曾经遇到过window.load函数被执行两次的问题: 原因是因为我在主页面和一个.net用户控件中都引用了同一个javascript文件。当我在主页面中删除了这个引用后,load函数只被执行了一次。

-1
我的问题是在index.cshtml 文件和_Layout.cshtml 文件中都有引用JS文件的标签。这导致document.ready函数触发两次,从而导致DataTables崩溃。

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