Javascript,脚本在IE中不起作用

时间:2011-05-26 15:48:57

标签: javascript

下面的例程在Mozilla中完美运行,但在IE中却没有(我使用了9但是已经改变了兼容模式,它在7和8中也被破坏了)。

我知道这与e.type中的'undefined'在IE中有关,在Moz中很好,但不知道正确的语法应该是什么来满足两者。

function changeChartColumns(){
        var myArray = [];
        var k = 1;
        var b = 0;
        myArray[0]=0;
        for (b in document.frm_obj.elements) {
            var e = document.frm_obj.elements[b];
            if ( e.type=="checkbox" ) {
                if(e.checked == true){
                    var at_least_one_checked = true;
                    myArray[k] = parseInt(e.value,10);
                    k = k+1;
                }
            }
        }
        if(at_least_one_checked == true){
            return myArray;
        }else{
            alert("I cannot display zero information. Please select some stuff using the checkboxes.");
            stop_script_running; // horrible hack
        }
}

这是HTML:

<form name="frm_obj" id="frm_obj" method="post">
      <table>   
        <tr>
         <td><input type="checkbox" name="list" value="2" checked onClick="changeChartColumns();"></td>
         <td>Option 1</td>
         <td><input type="checkbox" name="list" value="3" checked onClick="changeChartColumns();"></td>
         <td>Option 2</td>
         <td><input type="checkbox" name="list" value="4" checked onClick="changeChartColumns();"></td>

       </table>
     </form>

提前致谢。小时。

4 个答案:

答案 0 :(得分:1)

使用正确的for循环:

    for (var i=0; i < document.frm_obj.elements.length; i++) {

工作演示:http://jsfiddle.net/y7xFz/1

for...in旨在迭代对象的所有可枚举属性。 document.frm_obj.elements返回一个HTMLCollection,其可枚举属性在浏览器之间有所不同。通常,您不应在数组和HTMLCollections上使用for...in - 仅保留用于具有命名属性的对象映射。

答案 1 :(得分:0)

也许尝试使用getAttribute()

答案 2 :(得分:0)

(b.type ==“checkbox”)

[另外,] at_least_one_checked在本地if块中定义。

答案 3 :(得分:0)

在您的代码中替换以下行

for (b in document.frm_obj.elements) {

这一个

for (b in document.body.getElementsByTagName("input")) { 

这样它也可以在IE中使用。