3

重複の可能性:
クリックイベントが発生した後、イベントハンドラーを削除するにはどうすればよいですか?

ライブを使用してクリックイベントをボタンに割り当てようとしていますが、ユーザーがトリガーできるのは1回だけです。とにかくそれをすることはありますか?

//I only want the alert show once and disable the click event... 
$('#testBtn').live('click', function(){
    alert('hey ya');
})

注意:ボタンは動的に作成されます。

4

8 に答える 8

7

one()委任されたハンドラー(jQuery 1.7以降)でも使用でき、非推奨のlive()関数を次のようなものに置き換えることができます。

$(document).one('click', '#testBtn', function(){
    alert('hey ya');
});

document最も近い非動的な親に置き換えます。

于 2012-09-05T16:03:53.987 に答える
4

one次の機能を使用できます。

$('#testBtn').one('click', function(){
    alert('hey ya');
})

デモ: http: //jsfiddle.net/SEjYK/

于 2012-09-05T16:02:45.207 に答える
0

最良のオプションは、ボタンにライブではなく.oneを使用することです。それはもっと理にかなっています。それを使用したくない場合は、ページで非表示フィールドを使用できます。クリックイベントがトリガーされたら、フラグ値を設定します。

次回ボタンをクリックしたときにフラグ値を確認します。すでに一度実行されている場合は、その中のコードを実行しないでください。

この例を確認してください http://jsfiddle.net/sushanth009/Fakb5/

また、現在のjQueryバージョンでは.liveが非推奨になっていることにも注意してください。代わりに.on()を使用することをお勧めします

于 2012-09-05T16:47:55.713 に答える
0

あなたはおそらく最も速く走るこの方法でそれをすることができます..jsperf.comでチェックするつもりです

$('#testBtn').bind('click', function() {
       $(this).unbind('click');
       alert('Clicked and unbound!');
});​

http://jsfiddle.net/usZSU/

編集:これは、追加された3つのテストケースの中で最も速く実行されると思います-http ://jsperf.com/one-event を2〜3回実行して、最良の結果を取得します。実行するたびに、バインドが最も速く、1つが3%遅くなります。 。

于 2012-09-05T16:16:24.380 に答える
0

使用one()

$('#testBtn').one('click', function(){
    alert('hey ya');
})
于 2012-09-05T16:02:48.680 に答える
0
$('#testBtn').one('click', function() {
    alert('hey ya');
});

お役に立てれば!

編集:絶対に「ライブ」を使用したい場合:

$('#testBtn').live('click', function() {
    $(this).die('click');
    alert('hey ya');
});

'one'を使用する場合は、動的オブジェクトを生成してドキュメントに追加した後、最初のコードスニペットを実行するだけです。

ライブは非推奨であるため、「オン」を使用することをお勧めしますが、「ライブ」タイプのアプローチを使用している場合:

$(document).on('click', '#testBtn', function() {
    $(this).die('click');
    alert('hey ya');
});
于 2012-09-05T16:03:25.837 に答える
0

このページにはすでにもっと賢明な回答がありますが、.live()代わりに使用することを主張する場合one()、これはあなたが求めることを行います...

//I only want the alert show once and disable the click event... 
$('#testBtn').live('click', function(){
    $(this).die('click');
    alert('hey ya');
});

.die('click')クリック イベント ハンドラが削除されるため、再度発生することはありません。

于 2012-09-05T16:19:47.280 に答える
-1

unbindを使用して、すべてのクリックイベントを削除できます。

 $('#testBtn').unbind('click');
 $('#testBtn').unbind('live');
于 2012-09-05T16:03:36.397 に答える