jQuery禁用链接的启用事件处理程序

时间:2012-03-27 22:41:49

标签: jquery

这是代码:http://jsfiddle.net/4WyPq/

所以基本上当我点击'button1'它动画然后禁用按钮,之后我需要按下button2并启用'button1'事件,所以我再次按'button1'它应该做同样的事件。

3 个答案:

答案 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);
});
​

此处的演示演示:http://jsfiddle.net/jfriend00/NSZ8P/

答案 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)

我和你的小提琴玩了,给了你一个不同的选择,而不是弄乱绑定事件的内存位置,不得不让所有人感到困惑......试试这个:

http://jsfiddle.net/4WyPq/2/

$('.a1').click(function (){
    if(!$(this).hasClass("disabled")){
        $(this).addClass("disabled");
        $('.a1').animate({"top": "+=50px"}, "slow");
    }
});

$('.a2').click(function (){
    $(".a1").removeClass("disabled");
});