将函数绑定到两个事件会导致函数执行两次

时间:2012-09-26 10:14:39

标签: javascript jquery

我正在绑定一个手风琴标签,以便在点击和焦点时打开。但每当我点击它时,它会执行两次该功能。我该如何阻止这种行为? 我只希望它执行一个事件。点击或焦点。

$("h2.radioBoxInActive").bind('click focus', function () {
        input = $(this).prev("span, input");
        $(".selected", app.element).removeClass("selected").slideUp();
        $(".radioBoxActive", app.element).removeClass("radioBoxActive");
        $("#" + input.attr("data-panel")).slideDown().addClass("selected");
        $(this).addClass("radioBoxActive");
    });

2 个答案:

答案 0 :(得分:1)

避免双重执行只绑定focus事件。即使用户使用其他输入设备选择复选框(例如通过键盘)

,这也将确保处理程序的执行

答案 1 :(得分:1)

您可以保存上次执行的时间戳,以阻止该功能实际上同时执行。

这只允许函数在上次执行超过50毫秒之前执行。

(function(){
    var lastExecuted = 0;
    $("h2.radioBoxInActive").bind('click focus', function () {
        var currentTime = new Date().getTime();
        var timeDelta = currentTime - lastExecuted;
        if (timeDelta > 50) {
            lastExecuted = currentTime;
            input = $(this).prev("span, input");
            $(".selected", app.element).removeClass("selected").slideUp();
            $(".radioBoxActive", app.element).removeClass("radioBoxActive");
            $("#" + input.attr("data-panel")).slideDown().addClass("selected");
            $(this).addClass("radioBoxActive");
        }
    });
})();