關於IE,Chrome,Firefox瀏覽器的字符串拼接問題


昨天項目測試的時候,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循環;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM