Javascript IE 7“;停止运行此脚本";使用jQuery时出错
我似乎找不到导致IE 7在Chrome上运行时出现此错误的原因。在internet explorer中加载我的页面时,会弹出错误“停止运行此脚本消息”。有什么想法吗Javascript IE 7“;停止运行此脚本";使用jQuery时出错,javascript,jquery,internet-explorer,Javascript,Jquery,Internet Explorer,我似乎找不到导致IE 7在Chrome上运行时出现此错误的原因。在internet explorer中加载我的页面时,会弹出错误“停止运行此脚本消息”。有什么想法吗 $(document).ready(function() { var icons = { header: "ui-icon-circle-plus", headerSelected: "ui-icon-circle-minus" }; $('.ui-accordion').accordi
$(document).ready(function() {
var icons = {
header: "ui-icon-circle-plus",
headerSelected: "ui-icon-circle-minus"
};
$('.ui-accordion').accordion({
active: false,
collapsible: true,
autoHeight: false,
icons: icons
});
$("a").click(function (event) {
event.stopPropagation();
});
$('.requirementCheckBox').click(function() {
getReq();
});
});
function getReq() {
var componentList;
var selected = $(":checkbox:checked");
if(selected.length ==0){
$('#requirements_table_wrapper').remove();
}
else {
$.each(selected , function(i, n){
if(i == 0){
componentList = n.value;
}
else{
componentList += ',' + n.value;
}
});
$.getJSON("addRequirements/GetRequirements/?componentList=" + componentList, function (data) {
$('#requirements_table_wrapper').remove();
var reqString = '<table id="requirements_table"><thead><tr><th>Requirement ID</th><th>Requirements</th><th>Reference</th></tr></thead><tbody>';
for (var i = 0; i < data.length; i++) {
reqString += '<tr><td>'+ data[i].reqID + '</td><td>' + data[i].reqText + '</td>' + '<td>' + data[i].reqReference + '</td></tr>';
}
reqString += '</tbody></table>';
$("#requirementsDiv").append(reqString);
$("#requirements_table").dataTable({
"bJQueryUI": true,
"bPaginate": false,
"bRetrieve": true,
"oLanguage": {"sSearch" : "Filter Requirements:"}
});
});
}
$(文档).ready(函数(){
变量图标={
标题:“用户界面图标圆圈加”,
标题选择:“用户界面图标圆圈减号”
};
$('.ui accordion')。accordion({
活动:错误,
可折叠的:是的,
自动高度:false,
图标:图标
});
$(“a”)。单击(函数(事件){
event.stopPropagation();
});
$('.requirementCheckBox')。单击(函数(){
getReq();
});
});
函数getReq(){
var分量表;
所选变量=$(“:复选框:选中”);
if(selected.length==0){
$(“#要求(表)包装器”).remove();
}
否则{
$。每个(选定的,功能(i,n){
如果(i==0){
组件列表=n.值;
}
否则{
组件列表+=','+n.值;
}
});
$.getJSON(“addRequirements/GetRequirements/?componentList=“+componentList,函数(数据)){
$(“#要求(表)包装器”).remove();
var reqString=‘需求IDREQUIREMENTSREENCE’;
对于(变量i=0;i
}
我没有立即发现任何无限循环,但可能我已经盯着它太久了
**更新
问题似乎是手风琴,一旦它被删除IE加载页面正常 它不一定是一个无限循环,但脚本的某些部分需要花费太长的时间 尝试删除部分脚本,直到错误消失,然后您将找到需要优化的部分 首先应考虑两个循环:
$.each(selected , function(i, n){
及
for(变量i=0;i
如果数据数组非常大,则可以使用数组稍微优化第二个:
var reqArray = ['<table id="requirements_table"><thead><tr><th>Requirement ID</th><th>Requirements</th><th>Reference</th></tr></thead><tbody>'];
for (var i = 0; i < data.length; i++) {
var element = data[i]
reqString.push('<tr><td>'+ element.reqID + '</td><td>' + element.reqText + '</td>' + '<td>' + element.reqReference + '</td></tr>');
}
var regString = regArray.join('') + '</tbody></table>';
var reqArray=['Requirement IDRequirementsReference'];
对于(变量i=0;i
但我认为这并不能解决问题。仍然值得一试。我认为有改进余地的一个地方是,您使用+和+=,将reqString浓缩。不要这样做,而是将每个片段推到一个数组中,然后在“”上加入数组,然后附加到您的文档中
var reqString = ['<table id="requirements_table"><thead><tr><th>Requirement ID</th><th>Requirements</th><th>Reference</th></tr></thead><tbody>'];
for (var i = 0; i < data.length; i++) {
reqString.push('<tr><td>', data[i].reqID, '</td><td>', data[i].reqText,'</td>','<td>', data[i].reqReference, '</td></tr>');
}
reqString.push('</tbody></table>');
$("#requirementsDiv").append(reqString.join(""));
var reqString=['Requirement IDRequirementsReference'];
对于(变量i=0;i
另一个可以查看的地方是$.each的使用情况。尝试将其更改为与$相同的常规for循环。每个循环的效率并不总是与for相同
作为补充说明,您的脚本中有一个错误,您在脚本中添加了“}”)以结束getReq。使用$(“#requirementsDiv”).html(reqString)
而不是.append()
方法
$elem.html(string)
相当于elem.innerHTML=string
$elem.append(string)
首先将字符串转换为DOM元素,然后使用DOM.appendChild()方法将元素追加到HTML中
由于您是在页面加载时执行代码,因此div的内容很可能是空的。如果div不是空的,但不包含事件处理程序等,也可以使用.html()
:
data.length的值是多少?或者它是可变的?试试$(“#requirementsDiv”).html(reqString)代码>而不是。追加。我建议使用这个,特别是当div在追加之前是空的时候。我问了一个类似的问题,我也在使用手风琴,如果它有用的话@这可能是答案,请考虑把这个作为答案。代码>附加
必须创建许多文档片段,这可能需要一段时间。@meder,看起来手风琴是个问题。你最后做了什么,因为我没有看到你在帖子上选择了答案。如果你要使用数组,你也应该推送每个字符串,而不是在推送之前连接,即使只有5个。它将特别提高IE7的性能。这是事实,但只是微观优化。正如我在文章中提到的,我不认为这个循环会导致这个问题@crocaduck81应该首先尝试定位有问题的行。我确实认为,正如在帖子上评论的那样,主要问题可能在于append
调用。
var reqString = ['<table id="requirements_table"><thead><tr><th>Requirement ID</th><th>Requirements</th><th>Reference</th></tr></thead><tbody>'];
for (var i = 0; i < data.length; i++) {
reqString.push('<tr><td>', data[i].reqID, '</td><td>', data[i].reqText,'</td>','<td>', data[i].reqReference, '</td></tr>');
}
reqString.push('</tbody></table>');
$("#requirementsDiv").append(reqString.join(""));
var $elem = $("#requirementsDiv");
$elem.html($elem.html() + reqString);