当我将鼠标悬停在<td>
上时,它会等待900毫秒然后发送大量请求(我总是在这900毫秒内将鼠标悬停在更多的tds上)。我究竟做错了什么?为什么只有clearTimeout
(评论)有效?
我的观点是在点击服务器之前等待,如果用户在此正在运行的倒计时(900毫秒)内将鼠标移动到另一个<td>
,则会中止之前的倒计时并且会发生新的倒计时
$(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);
});
});
答案 0 :(得分:1)
您需要将timer
存储在悬停功能之外的范围内。我对isLoading
的范围也不太了解,所以如果这不起作用,请尝试将isLoading
移到与timer
相同的范围内:
var timer;
$(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);
timer = setTimeout(function(){
if (position == oID&&!isLoading)
{
clearTimeout(timer);
$.ajax({
beforeSend: function(xhr){ isLoading = true; },
url: 'ajax.php?what=click&position='+position,
success: function(data){
$('#hovercard').css(oData.offset());
$('#hovercard').show();
$('#hovercard').html(data);
}
});
}
}, 900);
});
});
你还有其他一些奇怪的东西。请注意,oID始终等于位置,因为它们在同一范围内同时设置。这使得if语句中的第一个条件毫无意义。我还删除了beforeSend函数中的var
语句。