【问题标题】:loading jquery twice causes an error?两次加载jquery会导致错误?
【发布时间】:2010-04-28 17:48:21
【问题描述】:

我有一个页面正在加载 jquery + 其他 js:

<script src="/eiv/javascripts/jquery-1.3.2.min.js" type="text/javascript"></script>
<script src="/eiv/javascripts/jquery.jeditable.js" type="text/javascript"></script>
<script src="/eiv/javascripts/jquery-ui-1.7.1.custom.min.js" type="text/javascript"></script>
<script src="/eiv/javascripts/corner.js" type="text/javascript"></script>
<script src="/eiv/javascripts/jquery.form.js" type="text/javascript"></script>
<script src="/eiv/javascripts/validationdate.js" type="text/javascript"></script>

我正在按如下方式加载标签:

<%if (tabnum == 1) {%>
        <script type="text/javascript">

            $(document).ready(function(){
                $("#tabs").tabs();
                $("#tabs ul li a").corner('7px top');

               var $tabs = $('#tabs').tabs();
                $tabs.tabs('select', 0);
                dateValidation();
                changeOption();
                deleteConfirmation();
        });
        </script>
<%} else if (tabnum==2) {%>
        <script type="text/javascript">

            $(document).ready(function(){
                $("#tabs").tabs();
                $("#tabs ul li a").corner('7px top');

               var $tabs = $('#tabs').tabs();
                $tabs.tabs('select', 1);

                   changeOption();
                   deleteConfirmation();
        });
        </script>
<%}%>

validationdate.js 是一个矿井构建的 js,用于检查日期和其他内容。它有这个作为第一行:

document.write('<script type="text/javascript" src=""jquery-1.3.2.min.js""></script>');

问题: 那是在生产中吗..这个页面出错并给出一个 JS 错误。这会导致选项卡不可点击。此错误间歇性发生,我似乎无法在我的机器上重现它。两台机器都使用IE。错误也发生在 Firefox 中,尽管在 Firefox 中没有出现一点 JS 错误。我什至有萤火虫,它也没有显示任何 JS 错误。

我怀疑会出现错误,因为validationdate.js 也在加载jquery-1.3.2.min.js。这会是错误吗?

顺便说一句,我得到的 JS 错误是“异常被捕获但未抛出 ..line 23”并且第 23 行如下

<script src="/eiv/javascripts/jquery-1.3.2.min.js" type="text/javascript"></script>

我在这里真的没有选择,愿意尝试一些东西。以及在我的机器上复制的方法,以便我可以修复它!

【问题讨论】:

  • 确保您使用的是一个 jquery 实例,并且它位于所有其他 js 包含的文件之上。
  • 是的,我的页面中只有一个 jquery 实例。然而,就像我说的,validationdate.js 也有一个 jquery 实例。所以这会产生两个 jquery 实例
  • 您使用document.write 编写的script 元素不会成功运行,因为src 属性中的双引号。
  • @interjay 有什么理由可以在我的机器上使用相同的浏览器运行良好?
  • 没关系...那我想的可能不是问题

标签: jquery validation


【解决方案1】:

首先回答你的问题,是的,包括jQuery两次会导致各种问题。

要修复它,这一行:

document.write('<script type="text/javascript" src=""jquery-1.3.2.min.js""></script>');

应该包裹起来检查jQuery是否已经存在而不是盲目地再次包含它,像这样:

if (typeof jQuery == 'undefined') {  
  document.write('<script type="text/javascript" src=""jquery-1.3.2.min.js""></script>');
}

然后,只有当页面上没有 jQuery 时才会包含它。有一个警告,如果您使用的是 不同(可能更新)的 jQuery 版本,而不是验证代码所针对的版本,则可能会出现一些中断。

【讨论】:

  • 关于双重加载 jQuery 导致错误的部分 - 这是来自经验,还是只是好的建议?
  • @ripper234 - 两者都...当您重新加载 jQuery 时,它将重新定义 window.$window.jQuery,例如清除所有以前加载的插件。这可能是我在 Stack Overflow 上看到的双重包含的最常见症状:“为什么我的插件没有定义?我包含了脚本!”
  • 好的,我正在尝试从我们的代码中清除它……由于一些复杂的原因,我们加载了两次 jQuery,并且在一些 jquery-ui 插件中看到了错误。
  • 好先生,如果谷歌在link 中失败,我可以使用谷歌 CDN 并回退到托管库,在这种情况下,我需要加载 jquery 2 次吗?
【解决方案2】:

如果你使用 iframe 会导致 JQuery 加载两次
1) 为每个页面加载 JQuery(即通过 application.html.erb 在 Ruby on Rails 中)和
2) iframe 也是来自您的应用程序的页面,而不是外部网站的 iframe。

【讨论】:

    【解决方案3】:

    我花了几个小时弄清楚为什么使用 jQuery.noConflict() 不能按原样工作......

    只需使用 var j$ = jQuery.noConflict(); 之后,每次在该页面上使用 Jquery 时,都使用 j$ 代替 $。

    【讨论】:

    • 或者使用 jQuery(function($) { }),它封装了你的函数并允许你正常使用 $
    猜你喜欢
    • 2017-02-27
    • 2014-01-08
    • 2015-06-09
    • 1970-01-01
    • 2013-08-31
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 2018-08-28
    相关资源
    最近更新 更多