• 关于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循环;

  • 相关阅读:
    Java 中最常见的 5 个错误
    在 Java EE 组件中使用 Camel Routes
    virtualenv 环境下 Nginx + Flask + Gunicorn+ Supervisor 搭建 Python Web
    [译]如何使用 Docker 组件开发 Django 项目?
    7 天玩转 ASP.NET MVC
    如何开发一个自己的 RubyGem?
    [译] 提高日志质量的 5 大技巧
    Ruby Profiler 详解之 stackprof
    总结 | 如何测试你自己的 RubyGem
    第十一节:讲述类的继承,数据库,文件的读写,图形绘制
  • 原文地址:https://www.cnblogs.com/phil_jing/p/5020341.html
Copyright © 2020-2023  润新知