Javascript 防止在输入停止之前执行回调
如果没有按下任何键,则触发AJAX调用的计时器。如果按键,则中止最后一个计时器并添加新计时器。这就是我想做的,但没有成功。这是我的密码:Javascript 防止在输入停止之前执行回调,javascript,timer,dom-events,Javascript,Timer,Dom Events,如果没有按下任何键,则触发AJAX调用的计时器。如果按键,则中止最后一个计时器并添加新计时器。这就是我想做的,但没有成功。这是我的密码: var t; input.onkeyup = function(){ $('.confirmText').html('Checking...'); var timeStampObj = new Date() var timeStamp = timeStampObj.getTime(); var oldTimeStamp =
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);
}
vart;
input.onkeyup=函数(){
$('.confirmText').html('Checking…');
var timeStampObj=新日期()
var timeStamp=timeStampObj.getTime();
var oldtimstamp=$(this).attr('timeStamp');//我在元素中存储时间戳
如果(时间戳<500+旧时间戳){
$(this.attr('timeStamp',timeStamp);
清除超时(t);
}
t=设置超时(函数(){
$.ajax({
url:'serverScripts/settings/checkEmailAvailability.php',
数据:“电子邮件=”+电子邮件,
成功:函数(文本){
如果(文本==“可用”){
$('.confirmText').html('Available!');
}否则{
$('.confirmText').html('occulated!');
}
}
});
},500);//半秒钟
$(this.attr('timeStamp',timeStamp);
}
听起来你好像在要求一个脱口器。术语。这是一种防止在某个时间阈值内触发多个事件的方法。您可以使用以下函数创建一个新函数,该函数仅在自上次事件以来经过给定的时间后才会被调用
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
的回调就不会执行
优秀的库包括并且至少有两个jQuery插件:
email
变量
你需要在某个地方定义电子邮件
,然后检查脚本是否有效
var email = $(this).value; // Pseudo-code - are you using jQuery?
好的,只是一个小的误发邮件没有定义