如何在不同的按钮上绑定功能?

时间:2012-11-07 07:21:32

标签: javascript jquery

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

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 个答案:

答案 0 :(得分: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);
});

答案 1 :(得分:1)

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

<强> Live Demo

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,最好使用on

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

答案 2 :(得分:1)

简单:

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

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

答案 3 :(得分:0)

有很多东西(虽然不是错误的本身)不是很好的做法。

  1. 元素的id不应以数字
  2. 开头
  3. .live()已弃用,应避免使用。应该使用.on()
  4. .live().on()不应该像循环中的那样绑定。它们应该尽可能使用单个选择器一次完成。
  5. 如果您希望将同一事件绑定到多个元素,则对所有按钮使用通用class会更好。
  6. 尝试

    $('input[type=button]').on('click', function(){
       alert( this.id );
    })