昨天項目測試的時候,IE8、IE11測試勾選checkbox然后執行保存的時候,竟然執行的結果與預期相反,嚇屎我了,最終排查之下,原來是拼接checkbox的值的時候出現的問題。本人對js了解知之甚少,用的不多,最近幾個項目都是大批的js,遇到各種小白問題,沒辦法只好慢慢學了。
HTML代碼:
<input type="checkbox" name="test" value="1"/><span>1</span> <input type="checkbox" name="test" value="2"/><span>2</span> <input type="checkbox" name="test" value="3"/><span>3</span> <input type="checkbox" name="test" value="4"/><span>4</span> <input type="checkbox" name="test" value="5"/><span>5</span><br> <input type='button' value='提交' onclick="fun()"/></span>
原js代碼:
var obj = document.getElementsByName("test"); check_val = []; for(k in obj){ if(obj[k].checked){ check_val.push(obj[k].value); } } alert(check_val.length);
勾選1和2之后的執行結果:IE彈出0,Chrome和Firefox彈出2;
難道是IE不支持push()?
修改如下的js:
var obj = document.getElementsByName("test"); var s=''; for(k in obj){ if(obj[k].checked){ s+=obj[k].value+','; } } alert("s"+s);
勾選1和2之后的執行結果:IE彈出s,Chrome和Firefox彈出s1,2,;
真奇怪,怎么IE又鬧特別了呢?好吧,繼續改
再次修改之后的js:
var obj = document.getElementsByName("test"); var s=''; for(k=0;k<obj.length;k++){ if(obj[k].checked){ s+=obj[k].value+','; } } alert("s"+s);
勾選1和2之后的執行結果:三個瀏覽器一致的彈出s1,2,
總結一下吧
1.for...in 遍歷的不是數組而是對象,所以他遍歷訪問的是obj的每個屬性,而不是數組元素;
2.for....in循環的效率低於for循環;