function setValidation() {    
    for (i = 0; i < alValidations.length; i++) { //alValidations是一个Array对象
        var instance = alValidations[i];       
        $("#" + instance.controlId).blur(function() {//instance.controlId是textbox的ID
            //事件处理代码
            test(instance.controlId);//只有最后的一个textbox能够正常执行test方法
        });
    }
}
//问题的关键在于,循环过程中每次得到的instance.controlId都会覆盖之前已经传入到test中的参数instance.controlId,
//有没有办法解决这个问题,使得传入test方法的参数保持当时循环时的instance.controlId的值?
//谢谢大家.

解决方案 »

  1.   

    for (i = 0; i < alValidations.length; i++) { //alValidations是一个Array对象
            var instance = alValidations[i];       
            $("#" + instance.controlId).blur(function() {//instance.controlId是textbox的ID
                //事件处理代码
                test(instance.controlId);//只有最后的一个textbox能够正常执行test方法
            });
        }
    改成,试试
    $.each(alValidations, function(i, v){
       $("#" + v.controlId).blur(function() {
                //事件处理代码
                test(v.controlId);
            });
    })
      

  2.   

    这种方法也许可行,但是不能解决我的问题,
    我为了让大家很快明白我的意思,所以简化了代码
    其实instance中还有很多属性,不是this能访问到得,
    比如instance.xxxFlag,instance.xxxZipCode等等.
    不过还是谢谢你的回答!
      

  3.   


    如果是这个需求,用我的方法就可以了。
    利用jquery的each循环数组
      

  4.   

    函数作用域问题:
    代码稍微改下就可以了.function setValidation() {    
        for (i = 0; i < alValidations.length; i++) { //alValidations是一个Array对象
            var instance = alValidations[i]; 
            (function(){      
            $("#" + instance.controlId).blur(function() {//instance.controlId是textbox的ID
                //事件处理代码
                test(instance.controlId);//只有最后的一个textbox能够正常执行test方法
            });
            })();
        }
    }这样改就OK了.
      

  5.   

    function setValidation() {    
        for (i = 0; i < alValidations.length; i++) { //alValidations是一个Array对象
            var instance = alValidations[i];       
            $("#" + instance.controlId).blur(function() {//instance.controlId是textbox的ID
                //事件处理代码
                test(instance.controlId);//只有最后的一个textbox能够正常执行test方法
                 //要是非要以前的话
                var Array;
              Array +=instance.controlId+",";//保存每个ID
               });
              var newinstanceId ;
              newinstanceId =Array.split(",");//得到所有的ID了
        }
    }