Javascript JS clearTimeout即使在函数外部设置了var也无法工作

Javascript JS clearTimeout即使在函数外部设置了var也无法工作,javascript,jquery,hover,settimeout,Javascript,Jquery,Hover,Settimeout,我试图在悬停时显示预览,但如果我将鼠标移离,我希望预览不显示。目前,如果我在“.searchRecord”元素上快速移动鼠标,它将在300ms后显示,并且在setTimeout函数完成之前调用mouse off函数时被“卡住”。如果我让光标停留在元素上,直到预览显示一切正常 我在函数外部设置变量,就像我在别处读到的一样,但是,它不会重置。我有点不知所措 var timer; $('.searchRecord').hover(function() { $(this).children('.

我试图在悬停时显示预览,但如果我将鼠标移离,我希望预览不显示。目前,如果我在“.searchRecord”元素上快速移动鼠标,它将在300ms后显示,并且在setTimeout函数完成之前调用mouse off函数时被“卡住”。如果我让光标停留在元素上,直到预览显示一切正常

我在函数外部设置变量,就像我在别处读到的一样,但是,它不会重置。我有点不知所措

var timer;
$('.searchRecord').hover(function() {
    $(this).children('.previewLoad').show();
    var current = '#'+$(this).children('div').attr('id');

    //slight delay before hover so they can select what they want
    var timer = window.setTimeout(function(){
        $(current).fadeIn('fast');
        $(current).siblings('.previewLoad').hide();
    }, 300);
}, function() {
    window.clearTimeout(timer);
    var current = '#'+$(this).children('div').attr('id');
    previewTimeouter(current);
});

您正在悬停回调内部再次使用
var timer
,该回调将其范围限定到该函数,并对父
timer
变量进行阴影处理


移除该内部
var
,一切都会好起来。

您在悬停回调内部再次使用
var timer
,它将其范围限定到该函数,并隐藏父
timer
变量


移除内部的
var
,一切都会好起来。

你有重复的计时器声明。在悬停回调中的
var timer
中删除
var

var timer;
$('.searchRecord').hover(function() {
    $(this).children('.previewLoad').show();
    var current = '#'+$(this).children('div').attr('id');

    //slight delay before hover so they can select what they want
    timer = window.setTimeout(function(){
        $(current).fadeIn('fast');
        $(current).siblings('.previewLoad').hide();
    }, 300);
}, function() {
    window.clearTimeout(timer);
    var current = '#'+$(this).children('div').attr('id');
    previewTimeouter(current);
});

您已经复制了计时器声明。在悬停回调中的
var timer
中删除
var

var timer;
$('.searchRecord').hover(function() {
    $(this).children('.previewLoad').show();
    var current = '#'+$(this).children('div').attr('id');

    //slight delay before hover so they can select what they want
    timer = window.setTimeout(function(){
        $(current).fadeIn('fast');
        $(current).siblings('.previewLoad').hide();
    }, 300);
}, function() {
    window.clearTimeout(timer);
    var current = '#'+$(this).children('div').attr('id');
    previewTimeouter(current);
});

这不会解决您的问题,但可以考虑为jQuery使用一百万个工具提示插件中的一个,在那里您还可以设置延迟设置,而不必关心实现。这不会解决您的问题,但可以考虑为jQuery使用一百万个工具提示插件中的一个,在那里你可以设置你的延迟设置,你不必关心实现。就是这样。我关于堆栈溢出的第一个问题是完全失败。非常感谢你的帮助!就这样。我关于堆栈溢出的第一个问题是完全失败。非常感谢你的帮助!