2011-02-02 18 views
4

クリックイベントを特定の要素に追加するよりも削除することはできますか?すなわちJqueryの削除および追加のクリックイベント

は私が持っている $("#elem").click(function{//some behaviour});$(".elem").click(function{//some behaviour});(1つの以上の要素がある)しばらく私の他の機能getJson私は#elemからクリックイベントを削除し、それが再びgetJson関数からONSUCCESS追加したい実行されています、しかし、マウスイベントとマウス離脱の両方のイベントを常に維持していますか?

また、モーダルウィンドウのようなクリックを防ぐためにオーバーレイを作成することはできますか?それは良いアイデアですか?

編集:私はいくつかの本当に良い答えを見てきましたが、私は目的ではない、省略することを1つの詳細がある

。複数の要素があり、元の質問に記載されているように、elementIdにないclassNameのclick関数を呼び出します。

+0

イベントハンドラ内の最初のifステートメントは、ブール値 'jsonIsLoaded'が真であるかどうかをチェックします。そうであれば、それを 'false'に設定して処理を続行し、そうでなければ' event.preventDefault() 'を呼び出してfalseを返します。そうすれば、いつでもイベントをバインドしたりアンバインドしたりする必要はありません! –

+0

@afEkenholm niceeee – London

+0

'function'の後には、オプションでclickイベントをパラメータとして受け取る括弧のセットを続ける必要があります:' function(evt){...} '。更新に関して:_all_要素をクリック解除できないようにするか、またはクリックした要素だけをクリックする必要がありますか? –

答えて

6

よりもむしろunbind()を使用して、後で同じイベントハンドラを再バインドする必要がありますを意味し、あなたの要素がすべてのAJAX要求時にclickイベントを無視持つようにajaxStartajaxStopイベントでjQueryのdata()機能を使用することができます。

$(".elem").click(function() { 
    if (!$(this).data("ajaxRequestPending")) { 
     // some behaviour 
    } 
}).ajaxStart(function() { 
    $(this).data("ajaxRequestPending", true); 
}).ajaxStop(function() { 
    $(this).removeData("ajaxRequestPending"); 
}); 

EDIT:セレクタに一致するすべてが処理されますので、この答えは、(質問者の編集を参照)もIDとクラスのプルーフですAJAXのイベントは正しい方法です。これがjQueryの主なセールスポイントです。

+0

@フレデリックハミディが、私はajax関数を使用していません、私もjQueryからgetJsonを使用していますか、それともajax関数としても属していますか? – London

+0

@ロンドン、[$ .getJSON()](http://api.jquery.com/jQuery.getJSON/)は[$ .ajax()]を呼び出します(http://api.jquery.com/jQuery.ajax/ )内部的には実際には* AJAX関数であり、 'ajaxStart'と' ajaxStop'を期待通りに起動します。 –

+0

@フレデリックハミディ大丈夫:)私はそれを試してみましょう。tnx – London

2

あなたは.unbind()を探しています。それを'click'に渡すと、クリックイベントが破棄されます。

あなたのgetJSONの直前に置いて、クリックイベントをあなたのajax呼び出しの成功ハンドラの中に再バインドします。

0

クリックイベントをバインド/バインドするのではなく、別の変数の状態をチェックしてアクションを実行する必要があるかどうかを確認できます。

var MyObject = { 
    requestActive = false; 
}; 

function MyJsonFunction() { 
    // when requesting 
    MyObject.requestActive = true; 
    //... 
    // when request over 
    MyObject.requestActive = false; 

} 

$("#elem").click(function{ 
    if (MyObject.requestActive == true) { 
    //do something 
    } 
}); 
関連する問題