2013-10-07 48 views
1

看来IE8忽略了我的点击事件!当我按下“+”按钮并在“ - ”上删除它时,它应该添加一个新行。我是WEB开发新手,但我看不到其他任何问题。我测试它,它可以正常使用IE10,IE9,但不适用于IE8!你能帮我解决这个问题!JavaScript事件在IE 8中不起作用

我的HTML代码:

<table id="sysAffectedTable2"> 
    <thead> 
     <tr> 
      <th>#</th> 
      <th><span class="locationName">Location Name</span></th> 
      <th>Subnet (Optional)</th> 
      <th>Add</th> 
      <th>Delete</th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr> 
      <td>1</td> 
      <td><input type="text" id="locationName1" value="" name="locationName1"/></td> 
      <td><input type="text" id="subnet1" value="" name="subnet1"/></td> 
      <td><input type="button" style="width: 40px" id="addDiskButton2" value=" + " onclick="insertRow2()"/></td> 
      <td><input type="button" style="width: 40px" id="delDiskButton2" value=" - " onclick="deleteRow2(this)"/></td>  
     </tr> 
    </tbody>   
    </table>  

我的JavaScript代码:

<script type="text/javascript" language="javascript"> 
    var maxRow2=1; 


    var table2 = document.getElementById('sysAffectedTable2'), tbody2 = table2 
      .getElementsByTagName('tbody')[0], clone2 = tbody2.rows[0] 
      .cloneNode(true); 

    function deleteRow2(el) { 
     var i = el.parentNode.parentNode.rowIndex; 

     if (i != 1) { 
      table2.deleteRow(i); 
      while (table2.rows[i]) { 
       updateRow2(table2.rows[i], i, false); 
       i++; 
      } 
      maxRow2--; 
     } else if (i == 1) { 
      table2.deleteRow(i + 1); 
      while (table2.rows[i + 1]) { 
       updateRow2(table2.rows[i + 1], i + 1, false); 
       i++; 
      } 
      maxRow2--; 
     } 
    } 

    function insertRow2() { 
     if (maxRow2 < 32) { 
      var new_row = updateRow2(clone2.cloneNode(true), 
        ++tbody2.rows.length, true); 
      tbody2.appendChild(new_row); 
      maxRow2++; 
     } 
    } 

    function updateRow2(row2, a2, reset2) { 
     row2.cells[0].innerHTML = a2; 

     var inp1 = row2.cells[1].getElementsByTagName('input')[0]; 
     var inp2 = row2.cells[2].getElementsByTagName('input')[0]; 

     inp1.name = 'locationName' + a2; 
     inp1.id = 'locationName' + a2; 
     inp2.name = 'subnet' + a2; 
     inp2.id = 'subnet' + a2; 

     if (reset2) { 
      inp1.value = inp2.value = ''; 
     } 
     return row2; 
    } 
</script> 

你可以看到它在现场here - http://jsfiddle.net/yHANj/1/

能不能请您帮帮我!

提前致谢!

+1

更新了您的问题的标签,因为您发布的JavaScript代码不在任何地方使用jQuery。 – Blazemonger

+2

为什么在天堂的名字是你使用jQuery v1.4.2?它在两到三年*之前被更新的版本所取代。 –

+2

@Blazemonger:但是如果你完全从这个问题中删除了jQuery,那么人们不会知道在他们的答案中依赖jQuery是没有问题的,这并不好。 (这只有在您将其从标题和文本中删除时才适用) –

回答

1

被遇到在这一行错误:++tbody2.rows.length

显然IE8的JavaScript引擎将这种情况不同于其他浏览器,但它没有意义,能够改变length属性的行数该表在任何浏览器。如果你想改变表中的行数,你可以通过插入一个新的DOM元素来实现(你正在使用.appendChild()调用)。

将其更改为tbody2.rows.length + 1而不是试图直接增加length属性。

编辑:的确,如果您尝试增加length其他浏览器,则该语句似乎只是被忽略。 IE8抛出异常而不是忽略它。

+0

感谢队友的作品,你只是让我的一天;) –

+0

嗨大卫,所以我测试了我的webisite与IE8其工作完美,但我测试它与IE7和它似乎我有同样的问题 - 如果你按“+”或“ - ”什么都没有发生:(请你帮我;)谢谢队友! –

+0

您遇到了克隆IE7中的节点时遇到的问题:http://jehiah.cz/a/rows-and-cells-in-ie-when-using-clonenode。我重做了你的小提琴,以便它在IE7中运行:http://jsfiddle.net/dmillz/spYTv/。如果这是有帮助的,随时upvote以前接受的答案:-) –