如何循环动态生成js呢?我这有段代码,望大神指点

$(".a").eq(0).on('keyup',function(){
  $('.b').eq(0).val($('.a').eq(0).val());
});
$(".a").eq(1).on('keyup',function(){
  $('.b').eq(1).val($('.a').eq(1).val());
});
$(".a").eq(2).on('keyup',function(){
  $('.b').eq(2).val($('.a').eq(2).val());
});

比如我想循环上述js代码,该怎么循环呢?谢谢

我自己试着写过下面这段,虽然没报错,但是无效的,keyup后a的值不会赋到b里面去。

var num=3;
if(var i=0;i<num;i++){
$(".a").eq(i).on('keyup',function(){
      $('.b').eq(i).val($('.a').eq(i).val());
    });
}
阅读 4.6k
4 个回答
    $(document).on('keyup','.a',function(){
        _index=$('.a').index(this);
        $('.b').eq(_index).val($(this).val());
    });

事件处理函数其实是延迟执行函数,同时也存在闭包,所以i是等于3的,所以一般做法是采用事件委托的方式,其实也就是把点击事件给a的父元素

闭包的问题……
解决方式:
1.使用匿名包装器(立即执行匿名函数)

var num=3;
for(var i=0;i<num;i++){
    (function (e) {
        $(".a").eq(e).on('keyup',function(){
            $('.b').eq(e).val($('.a').eq(e).val());
        });
    })(i);
};

2.从匿名包装器中返回一个函数

var num=3;
for(var i=0;i<num;i++){
    $(".a").eq(i).on('keyup',(function(e){
        return function(){
            $('.b').eq(e).val($('.a').eq(e).val());
        };
    })(i));
};

由于没有html代码,没做测试,题主可以自行检验一下。

和这个问题类似:用for 语句遍历 li ,点击 li 当按钮用不能输出当前 li 的序号

$('.a').each(function (index) {
    
    var that = $(this);
    that.on('keyup',function(){
        $('.b').eq(index).val(that.val());
    });

});
推荐问题