Javascript:延迟表单提交

时间:2013-02-06 08:12:02

标签: javascript

我有几个< 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;
    }
});

但它不起作用。选择select中的值也会触发停止计时器的click事件。

1 个答案:

答案 0 :(得分:1)

您可以跟踪哪个select启动了计时器,并忽略了click,如果它在计时器启动后的50毫秒内。

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