【问题标题】:IE 7 "stop running this script" error using jQuery使用 jQuery 的 IE 7“停止运行此脚本”错误
【发布时间】:2011-11-01 20:52:19
【问题描述】:

我似乎无法找到在 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:"}
    });

  });
}

}

我没有立即发现任何无限循环,但也许我已经盯着它太久了。

**更新 问题似乎出在手风琴上,一旦它被删除,IE 就会正常加载页面。

【问题讨论】:

  • data.length 的值是多少?还是可变的?
  • 尝试$("#requirementsDiv").html(reqString); 而不是.append。我推荐使用这个,特别是当 div 在追加之前为空时。
  • 我问了一个类似的问题,我也在使用手风琴,所以stackoverflow.com/questions/6006406/…如果有帮助!
  • @RobW 这可能是答案,请考虑将其发布为答案。 append 必须创建许多文档片段,这可能需要一段时间。
  • @meder ,看来手风琴是问题所在。你最后做了什么,因为我没有看到你在你的帖子上选择答案。

标签: javascript jquery internet-explorer


【解决方案1】:

使用$("#requirementsDiv").html(reqString); 代替.append() 方法。

$elem.html(string) 等价于elem.innerHTML = string
$elem.append(string) 首先将字符串转换为 DOM 元素,然后使用 DOM .appendChild() 方法将元素附加到 HTML。

由于您是在页面加载时执行代码,因此 div 的内容很可能是空的。如果 div 不为空,但不包含事件处理程序等,也使用.html()

var $elem = $("#requirementsDiv");
$elem.html($elem.html() + reqString);

【讨论】:

    【解决方案2】:

    我认为有改进空间的一个直接地方是您使用 + 和 += 连接您的 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(""));
    

    另一个值得关注的地方是您对 $.each 的使用。尝试将其更改为常规 for 循环,因为 $.each 并不总是像 for 那样有效。

    作为旁注,您的脚本中有一个错误,您在其中添加 '})' 以关闭 getReq。

    【讨论】:

      【解决方案3】:

      它不一定是无限循环,但脚本的某些部分需要太长时间。

      尝试删除部分脚本直到错误消失,然后您将找到需要优化的部分。

      您有两个应首先考虑的循环:

      $.each(selected , function(i, n){
      

      for (var i = 0; i < data.length; 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>';
      

      但我认为这不会解决问题。还是值得一试的。

      【讨论】:

      • 如果您要使用数组,您还应该推送每个单独的字符串片段,而不是在推送之前连接,即使只有 5 个片段。它将特别提高 IE7 的性能。
      • 这是真的,但是微优化。正如我在帖子中提到的,我认为这个循环不会导致问题。 @crocaduck81 应该首先尝试找到有问题的行。正如帖子中评论的那样,我确实认为主要问题可能在于append 电话。
      猜你喜欢
      • 2012-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-06
      • 2023-04-05
      相关资源
      最近更新 更多