2012-03-16 58 views
0

我試圖通過標記爲「全選」的複選框上的onclick事件來檢查所有複選框。 該代碼在FF,Chrome中工作正常,但在IE中無法正常工作。 代碼如下:檢查所有使用javascript的複選框在IE中不起作用

<script type="text/javascript"> 
function toggle(source) { 
checkboxes = document.getElementsByName('category'); 
for(var i in checkboxes) 
checkboxes[i].checked = source.checked; 
} 
</script> 

<input type="checkbox" name="selectAll" id="selectAll" onClick="javascript :toggle(this)" />Select All Categories 

<input type="checkbox" name="category" id="category1" />category1 
<input type="checkbox" name="category" id="category2" />category2 
<input type="checkbox" name="category" id="category3" />category3 

任何幫助,將不勝感激。

+0

@ Matrix-'getElementsByName'在IE中「工作」(它是[DOM 2 HTML spec]的一部分(http://www.w3.org/TR/DOM-Level-2-HTML/html.html# ID-71555259)),但IE將ID和NAME屬性視爲同一件事。 – RobG 2012-03-16 07:34:34

回答

2

這個清理版本放進jsFiddle在IE中工作正常:http://jsfiddle.net/jfriend00/m7T2S/

function toggle(source) { 
    var checkboxes = document.getElementsByName('category'); 
    for (var i = 0; i < checkboxes.length; i++) 
     checkboxes[i].checked = source.checked; 
}​ 

因此,在您的實際頁面中必須有其他內容出現,而您並未向我們展示。

我對你的代碼做的清理是:

  1. 聲明覆選框作爲一個局部變量,所以它不是偶然的全局變量。
  2. 使用for (var i = 0; i < array.length; i++)循環遍歷複選框數組。數組不應該迭代(for i in array),因爲它迭代對象的屬性,而不僅僅是數組元素。
  3. 在HTML中的事件處理程序上不需要前綴javascript:
+0

+1。我會補充說OP應該把複選框放在一個表單中,然後它們可以被引用爲'document.formName.category',使用屬性訪問應該比方法快(不是速度很重要,但是它更合乎邏輯碼)。 – RobG 2012-03-16 07:36:26

1

如果它的形式,那麼你可以不喜歡以下,而不是getElementsByName的:


function toggle(source) { 
    var field = document.formname.category; 
    for (i = 0; i < field.length; i++) { 
     field[i].checked = source.checked; 
    } 
} 
+0

我認爲你的意思是「如果它是一種形式」。 – RobG 2012-03-16 07:37:21

+0

是的......確定了錯字...謝謝 – 2012-03-16 07:45:40

1

地下1

function toggle(source) 
{ 
    checkboxes = document.getElementsByName('category'); 
    for(i=0;i<checkboxes.length;i++) 
    checkboxes[i].checked = source.checked; 
} 

它適用於IE8,我已經測試您的替換功能。