2011-11-10 83 views
0

所以我正在编写一个更新和显示数据库表的界面,并且客户端(使用DataTables)显示的每一行都有一个“编辑”和“删除”按钮。每次点击单行的编辑时,其他行中的所有编辑和删除按钮都将被禁用。这是Javascript代码我用它来做到这一点:Javascript禁用在IE浏览器中不工作的按钮9

 var editButtons = document.getElementsByName("EditRow"); 
     var deleteButtons = document.getElementsByName("DeleteRow"); 

     for (i in editButtons) { 
      editButtons[i].disabled = true; 
     } 

     for (i in deleteButtons) { 
      deleteButtons[i].disabled = true; 
     } 

这正常工作与Chrome和Firefox,但是当我尝试在IE9,它不会禁用任何东西。我已经尝试了很多东西来解决这个问题,包括使用jQuery抓取DOM对象,但没有任何工作。任何帮助表示赞赏。

回答

3

document.getElementsByName返回node list,这是阵列状。你应该这样对待:

var elements = document.getElementsByName('something'), 
    len = elements.length; 
for (var i = 0; i < len; i++) { 
    elements[i].disabled = true; 
} 
+0

这和Joseph Silber的解决方案一样。谢谢!所以(数组中的x)的语法不适用于数组? –

+0

@Mike_Perry,它将返回属性,而不仅仅是索引。所以避免在数组中使用...或者你会得到奇怪的结果。 – Joe

+0

安装了IE9并进行了测试。奇迹般有效。测试它在:http://jsfiddle.net/FKLze/1/ – Smamatti

2

您的例子并不在IE9工作,但是这并不:

Array.prototype.forEach.call(document.getElementsByName('EditRow'), function(el){ 
    el.disabled = true; 
}); 
+1

'Array.prototype'?这是一个好主意吗!? – Smamatti

+0

这实际上工作得很好。这是各种疯狂的,从来没有见过之前。谢谢! –

+0

@Mike_Perry请考虑尝试另一种解决方案。我**真的**不喜欢改变数组在foreach循环上的一般行为!在我看来不好的做法! – Smamatti

相关问题