首先取消绑定然后绑定(jquery)

时间:2013-06-22 11:37:30

标签: jquery onclick bind unbind

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函数上再次绑定事件?

请建议。谢谢。

2 个答案:

答案 0 :(得分:36)

看看你的问题,你似乎没有在你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
}

当您解除绑定时,请使用函数名称<{p}}调用unbind

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

然后,要绑定点击(单击#close时),您将使用:

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

注意:

更好的方法是使用onoff,如果你使用的版本大于jQuery v1.7,那么......好吧..它不会工作。在上面的代码中,只需将bind替换为on,将unbind替换为off

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

希望这有帮助!

答案 1 :(得分:5)

绑定和取消绑定处理

关键是范围。

您必须在事件处理程序之外声明并定义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