3

我试图在我的按钮上绑定警报:

for(var i=1; i<=3; i++){
   $('#' + i).live('click', function(){
       alert(i);
   });
};

这是我的html代码:

<input id="1" type="button" value="one">
<input id="2" type="button" value="two">
<input id="3" type="button" value="three">

但我在所有按钮上都得到 4。如何修复它以获得正确的警报值?(1、2、3等..)

http://jsfiddle.net/sergey1986/UFjsM/

4

4 回答 4

2
for (var i = 1; i <= 3; i++) {
    $('#' + i).live('click', function(i) {
        return function() {
            alert(i);
        };
    }(i));
}

请注意,您使用.live错误,重点不是单独绑定到每个元素,而是要找出每个元素的共同点并使用该选择器:

$("input[type=button]").live(function() {
    alert(this.id);
});
于 2012-11-07T07:24:16.847 回答
1

使用 this.id,因为当循环完成时,我将拥有打破循环的最后一个值。

现场演示

for(var i=1; i<=3; i++){
   $('#' + i).live('click', function(){
       alert(this.id);
   });
};

最好为所有按钮提供一些通用类并使用该类来绑定事件。

<input id="1" type="button" value="one" class="someclass">
<input id="2" type="button" value="two" class="someclass">
<input id="3" type="button" value="three" class="someclass">

$('.someclass').live('click', function(){
   alert(this.id);
});

live 已被弃用,您最好使用

$('.someclass').on('click', function(){
   alert(this.id);
});
于 2012-11-07T07:22:56.800 回答
1

简单的:

for(var i=1; i<=3; i++){
   $('#' + i).live('click', function(){
       alert(this.id);
   });
}

小提琴:http: //jsfiddle.net/rzpXK/

于 2012-11-07T07:24:17.117 回答
0

有很多事情(尽管本身没有)不是很好的做法。

  1. 元素id不应该以数字开头
  2. .live()已弃用,应避免使用。.on()应改为使用
  3. .live()或者.on()不应该像这样在循环中绑定。它们应该一次性完成,尽可能使用单个选择器。
  4. class如果您希望将相同的事件绑定到多个元素,则对所有按钮使用公共按钮是一个更好的主意

尝试

$('input[type=button]').on('click', function(){
   alert( this.id );
})
于 2012-11-07T07:25:02.087 回答