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()ループでそのようにバインドしないでください。可能であれば単一のセレクターを使用して、それらを 1 回で実行する必要があります。
  4. class同じイベントを複数の要素にバインドしたい場合は、すべてのボタンに共通のものを使用することをお勧めします

試す

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