2012-06-20 106 views
2

我正在嘗試使用JavaScript複選框。 IE(使用IE8)似乎對下面的代碼有問題。它在Firefox中運行得非常好。JavaScript for ..在循環IE問題

這是我的示例html。

<input type="checkbox" name="one" id="one" /> 
<input type="checkbox" name="two" id="two" /> 
<input type="checkbox" name="three" id="three" /> 
<input type="checkbox" name="four" id="four" /> 
<input type="checkbox" name="five" id="five" /> 

IE只是禁用ID爲「一」複選框不接觸「十一五」和「三」。

var all = new Array("one","two","three","four","five"); 
var some = new Array("one","five","three"); 

disableFew(some); 

function disableFew(few){ 
    for (var i in all){ 
     document.getElementById(all[i]).disabled = false; 
    } 
    for (var j in few){ 
     if(document.getElementById(few[j]).nodeName == 'INPUT'){ 
      document.getElementById(few[j]).checked = false; 
     } 
     document.getElementById(few[j]).value = 'disabled'; 
     document.getElementById(few[j]).disabled = true; 
    } 
} 

發生了什麼事情的線索?我只是網絡開發的初學者,所以我可能會錯過IE/Firefox的一些細微差別。

會感謝任何幫助!

+0

如果更改'some'數組中元素ID的順序,它是否仍然只是第一個? (順便說一句,聲明數組的最佳做法是使用數組字面語法:'var some = [「one」,「five」,「three」];'或'var some = [];'爲空數組。 ) – nnnnnn

+0

@nnnnnn:行爲仍然保持不變,不管順序如何。我在頁面加載/某些事件時調用了幾個函數。它看起來像IE重繪(行爲)只有腳本處理它控制。我仍然試圖找到一種方法來在每個函數之後將控制權返回給IE。有任何想法嗎? – Wilderness

+0

所有瀏覽器(不只是IE)在重繪前完成當前腳本是正常的。我不確定「每個函數之後」的意思,因爲你只顯示了一個函數,但是你可以通過'setTimeout()'調用你的函數來重新控制瀏覽器,每個延遲10ms)。我真的不明白爲什麼上面的代碼在IE8中不起作用,但重繪的東西是一個單獨的問題,因此您可能希望將該部分作爲一個新問題發佈,並提供更多詳細信息。 – nnnnnn

回答

2

您應該使用常規for循環:

for(var i=0; i<all.length; i++) ... 
for(var j=0; j<some.length; j++) ... 

for..in你使用會遍歷從數組原型等特性,不僅是你的數組索引。

此外,我會避免使用all作爲變量名,也許IE可能會感到困惑(它有它的document.all)。但我不確定這一點。

+0

我也嘗試過使用for循環。它仍然不起作用。 – Wilderness

+0

這很奇怪。不幸的是,我現在無法在IE上測試,我正在使用Mac。但這是一個jsfiddle,以防其他人想要嘗試:http://jsfiddle.net/GgHnG/ – bfavaretto

+0

我在頁面加載/某些事件時調用了幾個函數。它看起來像IE重繪(行爲)只有腳本處理它控制。我仍然試圖找到一種方法來在每個函數之後將控制權返回給IE。有任何想法嗎? – Wilderness