发送ajax请求之前的延迟不起作用
当我将鼠标悬停在 上时,它会等待 900 毫秒,然后发送大量请求(我总是在这 900 毫秒内将鼠标悬停在更多 td 上)。我做错了什么?为什么只有
clearTimeout
(注释)有效?
我的观点是在点击服务器之前等待,如果用户在此运行倒计时(900毫秒)中将鼠标移动到另一个,则先前的倒计时将中止并发生新的倒计时
$(function(){
var isLoading = false;
$("td").hover(function(){
var x = parseInt(0);
var position = $(this).attr('id');
clearTimeout(timer);
var oID = $(this).attr('id');
var oData = $(this);
var timer = setTimeout(function(){
if (position == oID&&!isLoading)
{
clearTimeout(timer);
$.ajax({
beforeSend: function(xhr){ var isLoading = true; },
url: 'ajax.php?what=click&position='+position,
success: function(data){
$('#hovercard').css(oData.offset());
$('#hovercard').show();
$('#hovercard').html(data);
}
});
}
}, 900);
// this only works -> clearTimeout(timer);
});
});
When I do hover over <td>
it does wait 900 milliseconds and then sends a lot of requests (I always hover over more tds in these 900ms). What am I doing wrong? why only clearTimeout
(commented) works?
My point is to wait before hitting server and if user move mouse to another <td>
in this running countdown (900ms), previous countdown is aborted and new one takes place
$(function(){
var isLoading = false;
$("td").hover(function(){
var x = parseInt(0);
var position = $(this).attr('id');
clearTimeout(timer);
var oID = $(this).attr('id');
var oData = $(this);
var timer = setTimeout(function(){
if (position == oID&&!isLoading)
{
clearTimeout(timer);
$.ajax({
beforeSend: function(xhr){ var isLoading = true; },
url: 'ajax.php?what=click&position='+position,
success: function(data){
$('#hovercard').css(oData.offset());
$('#hovercard').show();
$('#hovercard').html(data);
}
});
}
}, 900);
// this only works -> clearTimeout(timer);
});
});
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您需要将计时器存储在悬停函数之外的范围内。我也不太确定
isLoading
的范围,因此如果这不起作用,请尝试将isLoading
移至与timer
相同的范围code>:你还有其他一些奇怪的地方。请注意,oID 始终等于位置,因为它们是在同一时间、同一范围内设置的。这使得 if 语句中的第一个条件毫无意义。我还删除了 beforeSend 函数中的
var
语句。You will need to store
timer
in a scope outside the hover function. I'm not so sure about the scope forisLoading
either, so if this doesn't work, try movingisLoading
out to the same scope astimer
:You have some other oddities as well. Note that oID always will be equal to position as they are set at the same time, in the same scope. This makes the first condition in your if statement pointless. I've also removed the
var
statement in your beforeSend function.