JQuery - 关闭事件处理程序然后重新打开

时间:2013-06-12 21:30:13

标签: javascript jquery

在确定如何重新启用事件处理程序方面遇到一些麻烦。

我试图在动画结束前多次执行该函数。

这是一个小提琴:

http://jsfiddle.net/MkmnW/1/

这是我的代码:

$("#buttons a").click(function () {

    $('a').off();

    //  Remove class from current active
    $("#buttons a").removeClass('active');

    //  Change class on clicked button
    $(this).addClass("active");

    // Hide Non-Clicked Content
    $(".main_content").fadeOut("fast");


    $("#content_container").slideUp("slow");

    //  Find Selected
    var selected = $(this).attr("href");

    //  Show Selected

    $("#content_container").slideDown("slow", function () {
        $(selected).fadeIn("slow");
    });

    return false;
});

2 个答案:

答案 0 :(得分:2)

如果我正确理解您的示例,您希望通过删除事件来阻止动画多次运行。

如果您删除该活动,除非您再次附加活动,否则无法再次点击该活动。

以下是基于您的代码的示例:http://jsfiddle.net/MkmnW/4/

$(document).ready(function () {


$("#buttons a").click(function () {
    $('a').off("click");
    clickMenu(this);

    return false;
});

function clickMenu(el){
    //  Remove class from current active
    $("#buttons a").removeClass('active');

    //  Change class on clicked button
    $(el).addClass("active");

    // Hide Non-Clicked Content
    $(".main_content").fadeOut("fast");


    $("#content_container").slideUp("slow");

    //  Find Selected
    var selected = $(this).attr("href");

    //  Show Selected

     $("#content_container").slideDown("slow", function () {
        $(selected).fadeIn("slow");

        $("#buttons a").click(function () {
            $('a').off("click");
            clickMenu(this);

            return false;
        });             
    });       
}
});

答案 1 :(得分:0)

您可以$(element).unbind('click');解锁点击事件。与所有其他类型的事件相同。

然后,您可以使用$(element).bind('click', function(evt) { ... });

再次绑定它们

如果是动画,您可以$(element).click(function(evt) { $(this).stop().fadeOut("fast").whatever... });