2016-04-12 12 views
0

イベントハンドラをブートストラップモーダルにワイヤするコードがあります。セレクタなしのjQuery .offが動作しません

$("#learnMoreModal") 
     .off("show.bs.modal", learnMoreModalShow) 
     .on("show.bs.modal", learnMoreModalShow) 
     .off("hidden.bs.modal", learnMoreModalHidden) 
     .on("hidden.bs.modal", learnMoreModalHidden); 

しかしlearnMoreModalShowlearnMoreModalHiddenが二回実行されています。それは、イベントハンドラが二度実行されないことを確認する.on()を呼び出す前.off()を呼び出すので、このコードは、二回と呼ばなっています。 .off()への私の呼び出しはなぜそれを削除しないのですか?

+1

最小限のコードサンプルでは分かりませんが、代わりに['.one()'](http://api.jquery.com/one/)を使用することができますか? – Blazemonger

+0

私は*考えていません* OPは彼がただ一度しか火をかけたくないと言っています。彼は1つのイベントハンドラだけが接続されていることを確認したい。たとえば、彼はメソッド "HookUpMyEventHandlers"をX回数だけ呼び出すと言っていますが、イベントハンドラが一度だけ接続されていることを確認したいと考えています。 (私は彼が言っていると思います)。 – aquinas

+0

@aquinas .one()のドキュメントを読むと、ハンドラの単一インスタンスが取得されますが、.one()が実行されるたびに新しい単一インスタンスが作成されます。 – mhodges

答えて

0

私が恐れていたとしてまあ、それはダムものでした。特定の状況では、イベントをワイヤリングする機能を2回呼び出すことはできますが、実際はこの場合はありません。私はjQueryのソースに入り、jQueryが.on()への最初の呼び出しの間にlearnMoreModalShowに94のIDを割り当てていて、次に.off()の呼び出しでそのIDが定義されていないことがわかりました。それは私に、誰かが私の全体の.jsファイルに2回目の参照を追加したので、すべてがイベントをワイヤリングする機能だけでなく、2回実行されていたことがわかりました。

したがって、答えは.off()ですが、上記のとおり正しく動作しています。ハンドラがとにかく実行されている場合、ハンドラ関数の複数のインスタンスを使用しているか、.offが完了した後にハンドラを追加するコードがあります。

1

たぶん、あなたは

.unbind()jqueryの中

機能を使用して見てみる必要があります。クリックイベントを再定義して複数の機能を実行しないようにする必要があるときに使用します。

http://api.jquery.com/unbind/

+0

代替案ありがとうございます。私はjQuery 1.11を使用していますので、 'off()'がドキュメントに従って推奨される方法です。 – xr280xr

関連する問題