读书人

JQuery 在循环中设置事件,最后一个覆盖

发布时间: 2012-04-10 21:03:56 作者: rapoo

JQuery 在循环中设置事件,最后一个覆盖了前面所有的设置,求解决办法.

JScript code
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的值?//谢谢大家.


[解决办法]
test(this.controlId);
[解决办法]
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);
});
})
[解决办法]
函数作用域问题:
代码稍微改下就可以了.
JScript code
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方法        });        })();    }}
[解决办法]
JScript code
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了    }} 

读书人网 >JavaScript

热点推荐