如果未按任何键,则触发AJAX调用的计时器。如果按下某个键,则中止最后一个计时器并添加一个新计时器。这就是我想做但却未能成功的事情。这是我的代码:
var t;
input.onkeyup = function(){
$('.confirmText').html('Checking...');
var timeStampObj = new Date()
var timeStamp = timeStampObj.getTime();
var oldTimeStamp = $(this).attr('timeStamp');//I store a timeStamp in the element
if(timeStamp < 500 + oldTimeStamp){
$(this).attr('timeStamp', timeStamp);
clearTimeout(t);
}
t = setTimeout(function(){
$.ajax({
url: 'serverScripts/settings/checkEmailAvailability.php',
data: 'email='+email,
success: function(text){
if(text == 'available'){
$('.confirmText').html('Available!');
}else{
$('.confirmText').html('Occupied!');
}
}
});
}, 500);//Half a second
$(this).attr('timeStamp', timeStamp);
}
答案 0 :(得分:5)
这听起来像是在要求辩护者。术语comes from electronics。这是一种防止多个事件在某个时间阈值内触发的方法。您可以使用以下函数创建一个新函数,只有在自上次事件后已经过去一定时间后才会调用该函数。
function debounce(callback, timeout, _this) {
var timer;
return function(e) {
var _that = this;
if (timer)
clearTimeout(timer);
timer = setTimeout(function() {
callback.call(_this || _that, e);
}, timeout);
}
}
// requires jQuery
$("div").click(debounce(function() {
console.log("tset");
}, 2000));
只要点击事件继续触发,就会执行给debounce
的回调。
优秀的Underscore.js库包含an equivalent function,并且至少有几个jQuery插件:
答案 1 :(得分:0)
您在哪里定义JavaScript中的email
变量?
您需要在某处定义email
,然后检查您的脚本是否有效。
var email = $(this).value; // Pseudo-code - are you using jQuery?