2013-02-06 91 views
0

我有幾個<選擇>字段,我希望他們的父表單在他們的值被更改時自動提交,但我希望在那裏有1.5秒的延遲並中止提交,如果用戶打開另一個選擇。Javascript:拖延表單提交

我嘗試這樣做:

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

只是FYI,'setTimeout'總是返回一個非零的數字。所以如果你喜歡在計時器沒有運行的情況下使用'tmr = 0',你可以結合'tmr'和'timerOn'。 –

+0

好的提示,謝謝。 – L84

回答

1

您可以跟蹤哪個select啓動了定時器,並且如果它在定時器啓動的50ms內,則可以忽略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; 
     } 
    } 
}); 
+0

謝謝,這是有效的。好想法 :) – L84