Javascript IE 7“;停止运行此脚本";使用jQuery时出错

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

我似乎找不到导致IE 7在Chrome上运行时出现此错误的原因。在internet explorer中加载我的页面时,会弹出错误“停止运行此脚本消息”。有什么想法吗

 $(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);