我有许多不同的表单元素。当任何表单元素的值更改时,我需要在更改后500ms进行ajax调用。
但是,如果另一个表单元素的值更改了,那么我想将计时器重置为500ms,这样就避免了多个Ajax请求彼此之间在500ms之内发生的一系列更改。
是否有针对此要求的JavaScript或jQuery解决方案?
最佳答案
这是一些代码,演示您正在寻找的原理:
// Keeps track of the timer id in a scope that is outside of the event function
// The variable will remain in memory and available to the next event call
var myTimer;
// Detect changes on keyup.
$('.textbox').on('keyup', function () {
console.log('keyup');
setMyTimer(500);
});
// Detect on change.
$('select').on('change', function () {
console.log('change');
setMyTimer(1000);
});
function setMyTimer(timerDelay) {
// if myTimer has a value, then we should clear the timer. This stops us
// from queuing multiple timers
if (myTimer) {
console.log('clear tiemout');
clearTimeout(myTimer);
}
// Set the timer. It will be cleared if there is another handled 'keyup'
// event sooner than the timerDelay parameter
myTimer = setTimeout(function () {
console.log('Ajax stuff');
// ajax stuff
}, timerDelay);
};
在生产中使用之前,请删除
console.log
代码。观看此工作示例:
http://jsfiddle.net/cC6Dq/5/