0

アコーディオンタブをバインドして、クリックしてフォーカスすると開きます。しかし、クリックするたびに、関数が2回実行されます。この動作を停止するにはどうすればよいですか?単一のイベントのみを実行したい。クリックまたはフォーカスします。

$("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

最後の実行のタイムスタンプを保存して、関数が実質的に同時に実行されないようにすることができます。

これにより、関数が最後に実行されてから 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 に答える
1

二重実行を避けるには、focusイベントのみをバインドします。これにより、ユーザーが別の入力デバイスを使用して (キーボードなどで) チェックボックスを選択している場合でも、ハンドラーが確実に実行されます。

于 2012-09-26T10:18:03.200 に答える