2012-12-18 35 views
10

2週間前に同じ質問をした後、here、私はついに「the」ソリューションを見つけました。これが私自身の質問に答える理由です。 ;)JQueryでイベントをバインド、アンバインド、リバインド(クリック)する方法

JQUERYでのイベントのバインドを解除したり再バインドする方法はありますか。

+2

[jqueryの再バインド()し、それらを再バインドし、特定の時間のためのイベントを無効にする](https://stackoverflow.com/questions/13729681/jquery-rebind-disable-events-for-a-の可能性のある重複特定の時間にして再バインドする) –

答えて

10

これは完璧な解決策です。 (私にとっては少なくとも)

$(document).on('click', 'a#button', function(){ 
    $(this).after('<span> hello</span>'); 
    $('span').fadeOut(1000); 
}); 

$('a#toggle').toggle(
    function(){ 
     $(this).text('rebind'); 
     $('a#button').on('click.disabled', false); 
    }, 
    function(){ 
     $(this).text('unbind'); 
     $('a#button').off('click.disabled'); 
    } 
); 

".on()"それです。注:1行目のようにイベントをバインドすることは重要です! .click()や...で動作しません!

docsを参照してください。

Here is a fiddle試して試してみてください!

お楽しみください!

+1

元の質問ですでに回答している場合、なぜ再投稿しましたか? –

+1

他の解決策も素敵で便利だと思います! (古い投稿を更新しました) –

+0

偉大な答え!これにより、ボタンのクリックイベントを一時的に無効にすることができました。さらに強調するために、clickイベントのコンテキストは、上記の答えにどのように表示されるべきかを示す必要があります。 –

-1

この関数はjQueryを拡張して、.onと同じイベントハンドラを付加する演算子を含めるようにしました。さらに、与えられたハンドラの複数のインスタンスが複数のセレクタにアタッチされることを防ぎます。

イベントハンドラを削除して再接続すると、関連付けられている順序が変更されることに注意してください。

(function ($) { 
    $.fn.reBind = function(events, handler) { 
     return this.off(events, handler).on(events, handler); 
    }; 
}(jQuery)); 
2

バインドを解除したい場合はオブジェクトにクラスを追加し、このクラスを削除して元に戻します。

$('#button').click(function(){ 
    if($(this).hasClass('unbinded')) return; 
    //Do somthing 
}); 

$('#toggle').click(function(){ 
    $('#button').toggleClass('unbinded'); 
}); 
関連する問題