2010-11-05 66 views
16

这是我的HTMLjQuery的准备函数被调用两次

<div id="projekt" style="position: relative; width: 90%;height:400px;"/> 

$("#projekt").ready(function() { 

    .. do something with the div 
}); 

问题是准备函数被调用两次。可能是什么原因 ?

+0

你能告诉你的HTML?你有很好的机会加入这两次,或者甚至不止一次地引用jQuery? – hunter 2010-11-05 15:39:46

+0

你可能有'id ='projekt''两个元素? – Spudley 2010-11-05 15:42:43

+0

是的,我有jQuery引用两次。但是jQuery只有一个脚本元素。当我删除这个元素时,两个jQuery引用都消失了。奇怪。 – user137348 2010-11-05 15:44:55

回答

10

a bug which can cause this。尝试更新或绑定到文档而不是div。

+1

+1 - 1.4.3错误是最有可能的原因,因为选择器无关紧要...你可以执行'$(“#IDJFmliiojfasdfll”)。ready()'它会工作:) – 2010-11-05 16:03:52

+2

I尝试更新到1.4.4rc2并且错误依然存在。我正在使用$(document).ready()... – nornagon 2010-11-05 22:39:24

+5

Urgh,发现问题所在:我的就绪函数抛出一个异常......导致准备好的处理程序不注册ready事件已经处理。参见http://bugs.jquery.com/ticket/7273 – nornagon 2010-11-05 23:28:05

0

调用ready()的正确方法是document

$(document).ready(function() { 
    ... 
}); 
+0

$()。ready(handler)是[equivalent](http://api.jquery.com/ready/)但不推荐。为什么不推荐? – Grastveit 2011-04-08 18:13:52

0

我有同样的问题。当我将我的JS移动到另一个文件并将其包含在head标记中而不是在我正在处理的div下时,它就消失了。

1

我看到这种情况发生时,我有一个提醒('...'); .ready回调中的某处。这发生在最近的jQuery 1.5.2。将警报发出让代码只运行一次。

1

无需在配置以下标记添加应用程序的选项/ application.rb中 config.action_view.javascript_expansions [:默认值] =%(重量)(jquery的应用程序)

它将调用applcation.js的两倍,因此该功能还会在您的应用程序中运行两次。

11

如果您包含JavaScript文件两次,它将执行两次。 这在萤火虫中没有清楚显示。 script面板(我去调试javascript问题)将只在下拉菜单中显示一次文件。但是,如果您查看htmlnet面板,您可以查看是否有倍数。

我有这样的事情:

<script src="/scripts/project.js" type="text/javascript"></script> 
<script src="/scripts/project.js" type="text/javascript"></script> 

(这类似于@chs答案,但没有具体到轨)。

+0

这是我的“准备好”功能发射两次的原因。我曾经在tiles-template“layout”中包含了一次js文件......并且,通过tiles-definition“add-attribute”包含相同的文件。谢谢! – sairn 2015-04-20 21:39:42

2

我找到了解决这个问题。

您应使用此代码

$(document).bind("ready", MyDocumentReadyHandler) 

不是代码的

$(document).ready(...); 

你可以阅读更多有关使用此url “准备” 功能。

0

当使用JQM(jQueryMobile)时,您会遇到同样的问题,但在我的情况下,问题是重复的data-role="content"属性。该属性触发处理特定div或元素内的所有内容。在我的情况下,.ready函数被包装了两次,因此执行了两次。希望能帮助别人。

0

如果iframe中存在错误的src,如<iframe src="../" ...></iframe>,函数ready()将执行两次。确保你有一个有效的网址。

例:

<iframe src="../something.html" ... ></iframe>