2012-05-20 48 views
1

我試圖所有複選框後單擊選擇所有工作檢查/取消 /取消選擇所有複選框如下:選擇所有複選框不會在Internet Explorer 9

onclick="selectAll(document.getElementsByName('myForm:checkboxes'));" 

和JS功能:

function selectAll(checkboxes) 
     {  
       for(var i in checkboxes) 
       checkboxes[i].checked = true; 
     } 

function deselectAll(checkboxes) 
      {  
        for(var i in checkboxes) 
        checkboxes[i].checked = false; 
      } 

和HTML:

<input type="checkbox" value="15" name="myForm:checkboxes" id="myForm:checkboxes3:_1"> 

此代碼在Firefox中正常工作,但在Internet Explorer 9中不起作用。

一個for..in循環,從Mozilla的開發者網絡的文件:如答案

+0

也許:在名稱上是造成一些問題? – koenpeters

+1

不要在數組中使用for(var i in ...)'。此表單僅用於對象! – Andreas

+0

@Andreas,用什麼來代替? –

回答

3

發帖評論

一種...以任意順序

循環遍歷一個對象的屬性

由於您的checkboxes是nodeList而不是對象,因此應該使用for循環。

所以,相反的for...in,使用:

for (var i=0,len=checkboxes.length;i<len;i++){ 
    // do stuff 
} 

參考文獻:

+2

最重要的是,'for .. in'循環包含對象的默認屬性。在一個數組(或一個nodeList)中,這包括諸如'.length'屬性的東西。如果您的代碼爲對象原型添加屬性,即使是普通對象也可以被捕獲。對所有這些都可以使用'for .. in',但是你需要立即在循環中添加一個'if(obj.hasOwnProperty(key))'條件。爲了安全起見,這應該用於* all *'for .. in'循環。另見:http://javascriptweblog.wordpress.com/2011/01/04/exploring-javascript-for-in-loops/和http://www.jshint.com/ – Spudley