2011-11-10 84 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

相關問題