2

我收到一个 JS 错误,因为我的$(function () {...})处理程序似乎在加载必备插件脚本之前被触发。仅在 IE 中发生(在 IE7 中测试)。

我有一些<head>看起来像这样的 HTML:

<script type="text/javascript" src="../resources/org.wicketstuff.jwicket.JQuery/jquery-1.4.2-special.js"></script>
...
<script type="text/javascript" id="noConflict"><!--/*--><![CDATA[/*><!--*/
jQuery.noConflict();
/*-->]]>*/</script>
...
<script type="text/javascript" src="../resources/com.csc.aims.wicket.components.collapsiblefieldset.CollapsibleFieldsetBehavior/jquery.collapsiblefieldset.js"></script>
<link rel="stylesheet" type="text/css" href="../resources/com.csc.aims.wicket.components.collapsiblefieldset.CollapsibleFieldsetBehavior/jquery.collapsiblefieldset.css" />
<script type="text/javascript">
jQuery(function(){
jQuery('#collapse119').collapse({"iconClosedUrl":"../resources/img/white_plus","iconOpenUrl":"../resources/img/white_minus"});
});
</script>

所以请注意,根据 HTML 代码,顺序如下:

  1. jquery-1.4.2-special.js
  2. jQuery.noConflict() 调用
  3. jquery.collapsiblefieldset.js //定义 $.fn.collapse
  4. jQuery('#collapse119').collapse(...) 被调用

当这段代码在 FF 中运行时,一切正常。当我在 IE7(或 IE8 w/Compat。查看:IE7 标准模式)中测试它时,我收到一个 javascript 错误。调试器告诉我 jQuery.fn.collapse 是未定义的。

使用 IE8 开发人员工具,我尝试查看 jquery.collapsiblefieldset.js。我在列表中看到了该脚本,但该工具告诉我无法设置断点,因为该脚本未加载。

为什么 collapsiblefieldset.js 在我的 $() 就绪处理程序运行之前没有被加载?任何见解将不胜感激!谢谢。

4

3 回答 3

4

你正在使用

$(function(){...});

这是同义词

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

相反,您可以尝试

$(window).load( function(){...} );

稍后在页面加载序列中触发。

于 2010-06-05T02:33:28.580 回答
1

将所有脚本放在页面底部,就在</body>标签之前。

如果这不能解决问题,请将似乎没有及时加载的脚本移回<head>,并将其余脚本留在底部。

于 2010-06-05T00:40:07.833 回答
0

对于其他遭受此问题的人,可能值得仔细检查您没有多次引用 jQuery。如果您在头部定义了插件,那么它们将被主体中的第二个 jQuery 调用覆盖。

于 2014-07-07T22:03:57.957 回答