jquery $() 中放变量不生效

      var G1 =[];
      var sz =1;
      var name ='.G'+sz;
      $(".G"+sz).click(function(){
          alert("xxx");
             alert( G1[sz] = $(this).attr('value'));
               sz++;
      })
      
      选择器只对第一次的对象绑定点击事件 也就是 .G1;为什么会这样
阅读 3.3k
4 个回答

你这里没有用循环,所以只会执行一次,不会对第二次第三次的对象绑定,sz++执行完后,就没有了(而且你位置放的可能有问题),你可能以为sz++;执行完后,上面的sz会自动增加再执行一次,不会的,你要通过循环来指定,上面的 sz 只执行一次,后面即使值被修改了,前面的 sz 也还是原来的值;后面的 sz 是后面的值;
你可能是想这样,你看是不是?

var G1 = [];
var sz = 1;
var name = '.G' + sz;
while (sz < 10) {
    $(".G" + sz).click(function() {
        alert("xxx");
        alert(G1[sz] = $(this).attr('value'));
    });
    sz++;
}

建议先学 js ,再学 jquery,js 学好了,jquery 就是查查文档就好了

var G1 =[];
for(var sz = 1;sz < 10;i++) {
    $('.G'+sz).click(function(){
      
  G1.push($(this).attr('value'));
}

大概是这个意思?没给DOM结构暂定是10个吧。另外这个用事件代理写会更好。

因为你没有写循环啊,楼上的写法就是对的。
另外你这个思路不太对劲,既然要get同类型的东西进行相同的处理,为啥不起一个相同的名字一起get到呢?

$('.G').eq(index)

来获取每一个不是更好吗。。。

JS代码是自上而下执行的,当执行到

$(".G"+sz).click(function(){})

这一句的时候,绑定的是.G1这个元素,然后你后面的点击事件,只会执行里面的

alert("xxx");
alert( G1[sz] = $(this).attr('value'));
sz++;

$(".G"+sz).click(function(){})没有任何关系了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题