这是代码:http://jsfiddle.net/4WyPq/
所以基本上当我点击'button1'它动画然后禁用按钮,之后我需要按下button2并启用'button1'事件,所以我再次按'button1'它应该做同样的事件。
答案 0 :(得分:2)
将click事件绑定到链接时,您必须包含单击处理函数。
$(this).bind('click');
没有做任何事情,因为没有处理函数。如果要重新绑定,则必须再次传递单击处理函数。你可以通过将click处理程序分解为它自己的本地函数,然后在每次绑定click事件时使用该函数来实现。你可以这样做:
function bindA1(force) {
var a1 = $('.a1');
if (force || a1.hasClass("disabled")) {
a1.click(function() {
$(this)
.addClass("disabled")
.unbind("click")
.animate({"top": "+=50px"}, "slow");
return(false);
}).removeClass("disabled");
}
}
bindA1(true);
$('.a2').click(function () {
bindA1();
return(false);
});
此处的演示演示:http://jsfiddle.net/jfriend00/3kjaR/
如果你真的打算为这样的链接启用和禁用处理程序,可能更容易设置你检查的属性而不是实际删除事件处理程序。
你可以使用这样的标志:
$('.a1').click(function (){
if (!$(this).data("disabled")) {
$('.a1').animate({"top": "+=50px"}, "slow");
$(this).data("disabled", true);
}
});
$('.a2').click(function (){
$(".a1").data("disabled", false);
});
答案 1 :(得分:2)
.off()
删除处理程序.on()
再次绑定demo:
$(function() {
function clickHandler() {
$(this).animate({
"top": "+=50px"
}, "slow").off('click');
return false;
}
$('.a1').on('click', clickHandler);
$('.a2').on('click',function() {
$('.a1').on('click', clickHandler);
return false;
});
});
答案 2 :(得分:0)
我和你的小提琴玩了,给了你一个不同的选择,而不是弄乱绑定事件的内存位置,不得不让所有人感到困惑......试试这个:
$('.a1').click(function (){
if(!$(this).hasClass("disabled")){
$(this).addClass("disabled");
$('.a1').animate({"top": "+=50px"}, "slow");
}
});
$('.a2').click(function (){
$(".a1").removeClass("disabled");
});