0

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

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

2 回答 2

1

为了避免双重执行,只需绑定focus事件。即使用户使用另一个输入设备来选择复选框(例如通过键盘),这也将确保处理程序的执行

于 2012-09-26T10:18:03.200 回答
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");
        }
    });
})();
于 2012-09-26T10:20:51.147 回答