function sub(){
var textid = document.getElementsByName("jo");

var ccc = new Array();
for (var i=0; i<textid.length; i++) {
if(textid[i].checked){
//alert(textid[i].id);

var tempArray = getCountArray(textid[i].id);//这里可以认为是一个固定的数组
for (var i=0; i<tempArray.length; i++) {
ccc.push(tempArray[i]);
};
}
}
alert(ccc.length);
}  html里面写的是一个复选框,选一个的时候很正常。选择两个的时候,我alert它的id也是两个,但是下面ccc的长度并没有增加,为什么?
  说明一点:我只alert它的id的时候,是已经注释掉了下面的数组赋值和for循环。如果加上这个for循环之后,就只能alert出一个id了。这是什么原因?

解决方案 »

  1.   

    tempArray 是什么东西? alert(tempArray); //是什么
      

  2.   

    这个跟js的执行有关系,因为上面的循环还没有结束的时候,下面的alert就已经执行了,你可以给 alert(ccc.length);延迟一下应该就OK了,以前遇到过类似的问题windo.setTimeout(function,time); function是方法体或者要延迟的方法名 time是延迟的世界(毫秒)
      

  3.   

    getCountArray
    这个函数呢。你要注意,在html中id是唯一的,如果你不唯一,那后面的去覆盖掉前面的。
      

  4.   


    ccc的长度当然不会变,因为它的长度始终是tempArray的长度,而且选择2个时,alert也只有一个,说明for循环有问题,js中不建议这样使用循环遍历取值。
      

  5.   

    function sub(){
        var textid = document.getElementsByName("jo");
        
        var ccc = new Array();
        for (var i=0; i<textid.length; i++) {
            if(textid[i].checked){
                //alert(textid[i].id);
                
                var tempArray = getCountArray(textid[i].id);//这里可以认为是一个固定的数组
                for (var i=0; i<tempArray.length; i++) {
                    ccc.push(tempArray[i]);
                };
    alert(ccc.length);
            }
        }
        }
      

  6.   

    function sub(){
        var textid = document.getElementsByName("jo");
        
        var ccc = new Array();
        for (var i=0; i<textid.length; i++) {
            if(textid[i].checked){
                //alert(textid[i].id);
                
                var tempArray = getCountArray(textid[i].id);//这里可以认为是一个固定的数组
                for (var j=0; j<tempArray.length; j++) {
                    ccc.push(tempArray[j]);
                };
            }
        }
        alert(ccc.length);
    }
    for循环内的i换成别的变量,别用i了
      

  7.   

    for循环内的i换成别的变量,别用i了