2013-06-06 15 views
13

私がやっている不良プログラムライブラリをしたこのjQuery:ドキュメントオブジェクトにバインドされたイベントをバインド解除する方法は?

私が書いた
$(document).on('click','#keep_first_only_button', function(){ 

、この後、この悪い行動

$("keep_first_only_button").unbind("click"); 
$("keep_first_only_button").on("click", selectKeepFirstOfAll); 

「無効」にコードの一部が、この機能していませんdocument.click関数ハンドラが再びトリガされます

災害はページ内で発生するため、ドキュメントからすべてのクリックイベントをアンバインドすることはできません。

この状況で進むべき正しい方法はどれですか?

編集:申し訳ありませんが時間を失う質問、私は私のセレクターで行方不明の '#'を見ていない。本当にごめんなさい !

+0

この回答は役に立ちましたか?はいいいえわからない – realtebo

答えて

7
$("#keep_first_only_button")... 

ハッシュがありませんか?

+1

私の神様、私の質問をd​​ownvoteしないでください、これは問題でした...申し訳ありません... – realtebo

+1

純粋でよく説明された質問ですので、私はそれをダウンボートしませんが、受け入れられた答えのためにそれを握るでしょう:D – dKen

+0

8分待ってください、そして私はこの答えを受け入れます! – realtebo

25

元のイベントハンドラは、という委任されたイベントとしてバインドされていたため、$('#keep_first_only_button')自体から削除することはできません。 documentレベルで削除する必要があります。 selector 引数を提供し、具体的な委任イベントハンドラを削除するには

the documentationから

。セレクタ文字列は、イベントハンドラがアタッチされたときに、 .on()に渡された文字列と完全に一致する必要があります。委任されていないイベントを削除しないで、委任された イベントを要素から削除するには、 特別値"**"を使用します。

つまり、委任されたイベントをバインド解除するには、バインドに使用したのと同じ引数セットを使用するだけで、代わりにoffに渡す必要があります。バインドされた関数は匿名ですので、あなたがアンバインドdocumentレベルに#keep_first_only_buttonにバインドされているすべての委任イベントハンドラを解決する必要がありますので、あなたは、それを参照することはできません。

$(document).off('click', '#keep_first_only_button'); 

はEDIT:がどのように見えます問題は欠けているハッシュだけでした。奇数、私は思って誰のために

+0

あなたの答えは確かに役に立ちます、ありがとう、本当に、仕事をやる、私はクロスブラウザーを試みました、そして、私はすべて働いています。 – realtebo

+0

私はjqueryダイアログを使用しています。ダイアログのページを読み込むときに、$(document).on( 'click'、 '.blahblah'、function(){});私の人生は$( '。blahblah')。off()がclickイベントをクリアしていない理由を理解できませんでした。この回答はちょうど私に掘削のもう半分の日を救った。ありがとうございました! – Rebecca

+0

あなたは私に多くの時間を節約します。 Thx –

4

...あなたは定期.off()コールを使用して委任イベントハンドラをバインド解除できなかったと思った...マティアス・Buelensは正しいです。

あなたは

$(document).on("click","#element",function(){ }); 

、後でそれを遮断したいのようなバインド要素を持っている場合は、あなたのようにそれをしなければならない:あなたが出て、セレクタの使用を検討してイベントを削除したい場合は

$("#element").click(function(e) { 
    $(document).off('click', '#element'); 
}); 
0

$(document)です。オフ( "クリック"、 "**");

関連する問題