我有几个< 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事件。
答案 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;
}
}
});