$(document).ready(function() {...}) 在插件脚本加载之前运行

发布于 2024-09-04 11:38:53 字数 1522 浏览 11 评论 0原文

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

我的 中有一些 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( ) call
  3. jquery.collapsiblefieldset.js //defines $.fn.collapse
  4. 调用 jQuery('#collapse119').collapse(...)

当此代码在 FF 中运行时,一切正常。当我在 IE7(或 IE8 w/Compat.View: IE7 标准模式)中测试它时,出现 javascript 错误。调试器向我显示 jQuery.fn.collapse 未定义。

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

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

I'm getting a JS error because my $(function () {...}) handler is being fired seemingly before the prerequisite plugin script is loaded. Only happens in IE (testing in IE7).

I have some HTML in my <head> that looks like this:

<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>

So notice the sequence, according to the HTML code, is as follows:

  1. jquery-1.4.2-special.js
  2. jQuery.noConflict() call
  3. jquery.collapsiblefieldset.js //defines $.fn.collapse
  4. jQuery('#collapse119').collapse(...) is called

When this code runs in FF, everything works fine. When I test it in IE7 (or IE8 w/Compat. View: IE7 standards mode), I get a javascript error. The debugger shows me that jQuery.fn.collapse is undefined.

Using the IE8 developer tools, I try to look at jquery.collapsiblefieldset.js. I see the script in the list, but the tool tells me that I can't set a breakpoint because the script isn't loaded.

Why does the collapsiblefieldset.js not get loaded before my $() ready handler is run? Any insight would be appreciated! Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

仄言 2024-09-11 11:38:53

您正在使用

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

which 的同义词

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

,相反,您可以尝试

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

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

You're using

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

which is synonym of

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

Instead, you might try

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

which fires later in the page loading sequence.

云雾 2024-09-11 11:38:53

将所有脚本放在页面底部、 标记之前。

如果这不能解决问题,请将未及时加载的脚本移回 ,并将其余脚本保留在底部。

Put all of your scripts at the bottom of the page, right before the </body> tag.

If that doesn't fix it, move the scripts that do not appear to be loading in time back to the <head>, and leave the rest of the scripts at the bottom.

遮了一弯 2024-09-11 11:38:53

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

To anyone else suffering from this problem, it might be worth double checking that you don't have multiple references to jQuery. If you have plugins defined in the head, then they will get overridden by a second jQuery call in the body.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文