2

在弄清楚如何重新打开事件处理程序时遇到了一些麻烦。

我试图在动画完成之前阻止该函数多次执行。

这是一个小提琴:

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;
});
4

2 回答 2

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;
        });             
    });       
}
});
于 2013-06-12T21:51:26.813 回答
0

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

然后,您可以再次绑定它们$(element).bind('click', function(evt) { ... });

在动画的情况下,您可以$(element).click(function(evt) { $(this).stop().fadeOut("fast").whatever... });

于 2013-06-12T21:38:03.090 回答