web-dev-qa-db-ja.com

最初にクリックのバインドを解除してからバインド(jquery)

1. onclickイベントがオンになっていますが、

$('#locations').click(function(){
$('#train').unbind('click'); 
//do some stuff
}

2.閉じるボタンがクリックされると

$('.close').click(function(){
//do some stuff
}

3.もう一度#trainをクリックすると

$('#train').bind('click', function() {
alert('train is clicked');
//do some stuff
}

問題は#trainが起動しないことです。close関数でイベントを再度バインドするのですか?

提案してください。事前に感謝します。

24

あなたの質問を見ると、clickの後にunbindをバインドするように思われないので、起動しません。 (機能の順序を正しく保っていると仮定します)。この方法で行う必要があります。

//Set a function with the action you need to do after you click the train
function  trainClick() {
  alert('train is clicked');
  //do some stuff
}

バインドを解除するときは、関数名を使用してunbindを呼び出します。

$('#locations').click(function(){
 $('#train').unbind('click',trainClick);
//do some stuff
}

次に、クリックをバインドするには(#closeをクリックします)、使用します:

$('.close').click(function(){
  $('#train').bind('click',trainClick);
  //do some stuff
}

注意 :

JQuery v1.7よりも新しいバージョンを使用している場合は、それが機能しないため、onoffを使用する方が良いでしょう。上記のコードでは、bindonに、unbindoffに置き換えるだけです。

$('#train').on('click',trainClick);
$('#train').off('click',trainClick);

お役に立てれば!

39
krishgopinath

バインドおよびバインド解除ハンドラ

キーはスコープです。

他のボタンの機能が表示できるように、イベントハンドラの外部でfunction (trainClick(){stuff it does})を宣言および定義する必要があります。

以下に例を示します。

function trainClick()
{
    alert("train is clicked"); //Notice this function is declared outside event handlers below
}
$('#button1').on("click", trainClick); //this calls the above function

$("#button2").on("click",function(){
    $("#button1").off("click",trainClick); //unbinds button1 from trainClick() function (event handler)
});//End Button 2 click

$("#button3").on("click",function(){
    $("#button1").on("click",trainClick); //binds button1 to trainClick() function (event handler)
});//End Button 2 click
5
Sean