我有一个页面,其中正在加载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中,虽然很少JS错误的东西没有出现在Firefox中。我甚至还有一个没有显示任何JS错误的firebug。
我怀疑错误即将发生,因为validationdate.js
也在加载jquery-1.3.2.min.js
。这可能是一个错误吗?
顺便说一下,我得到的JS错误是'异常被抓住但没有被抛出..线23'而第23行正在跟随
<script src="/eiv/javascripts/jquery-1.3.2.min.js" type="text/javascript"></script>
我真的没有选择,我愿意尝试一下。以及在我的机器上重现的方法,以便我可以解决它!
答案 0 :(得分:13)
首先回答你的问题,是,包括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而不是为验证代码构建的,那么有可能会有一些中断。
答案 1 :(得分:1)
我花了几个小时搞清楚为什么使用jQuery.noConflict()不能正常工作......
只需使用
var j$ = jQuery.noConflict();
之后,每次在该页面上使用Jquery时,使用j $代替$。
答案 2 :(得分:0)
如果你使用iframe将导致JQuery加载两次
1)为每个页面加载JQuery(即通过application.html.erb在Ruby on Rails中)和
2)iframe也是来自应用程序的页面,而不是外部站点的iframe。