0

いくつかの <select> フィールドがあり、それらの値が変更されたときに親フォームを自動的に送信したいのですが、1.5 秒の遅延があり、ユーザーが別の選択を開いた場合は送信を中止したいと考えています。

私はこれを試しました:

var tmr;
var timerOn = false;

function submitSearchOptions() {
    $('#searchoptionsform').submit();
}

$('#searchoptionsform select').change(function() {
    if (!timerOn) {
        tmr = setTimeout(submitSearchOptions,1500);
        timerOn = true;
    }
});

$('#searchoptionsform select').click(function() {
    if (timerOn) {
        clearTimeout(tmr);
        timerOn = false;
    }
});

しかし、うまくいきません。選択で値を選択すると、タイマーを停止するクリック イベントも発生します。

4

1 に答える 1

1

誰がタイマーを開始したかを追跡し、タイマー開始から 50ms 以内であればselect無視することができます。click

var tmr;
var timerSelect = null;
var timerStarted = null;

function submitSearchOptions() {
    $('#searchoptionsform').submit();
}

$('#searchoptionsform select').change(function() {
    if (!timerStarted) {
        tmr = setTimeout(submitSearchOptions,1500);
        timerStarted = new Date();
        timerSelect = this;
    }
});

$('#searchoptionsform select').click(function() {
    if (timerStarted) {
        if (timerSelect !== this || (new Date() - timerStarted) > 50) {
            clearTimeout(tmr);
            timerStarted = null;
            timerSelect = null;
        }
    }
});
于 2013-02-06T08:19:12.083 に答える