先解除绑定点击事件,然后再绑定(jQuery)。

28

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函数中重新绑定事件吗?

请提供建议。先行致谢。


在关闭按钮被点击后,您是否想要重新绑定 #train 元素? - Ankit Jaiswal
你使用的是哪个版本的jQuery?请使用.on.off代替.bind - Omar
Ankit,是的,那就是我想做的。所以一旦关闭按钮/ID被单击,我可以再次单击#train。 - Prithviraj Mitra
Omar,我正在使用jquery-1.7.1。 - Prithviraj Mitra
2个回答

43

看了你的问题,你似乎没有在解除绑定后重新绑定 click 事件,所以它不会触发。(假设你已经正确地保持了功能顺序)。你需要按照以下方式进行:

//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,因为否则它将无法工作。在上面的代码中,只需用 on 替换 bind,用 off 替换 unbind

$('#train').on('click',trainClick);
$('#train').off('click',trainClick);
希望这可以帮到你!

谢谢电脑。请给我一些时间来测试它...很快会回复您。 - Prithviraj Mitra

7

绑定和解除处理程序

关键在于范围。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接