【发布时间】:2012-12-29 02:39:19
【问题描述】:
我遇到了某种变量超出范围的问题或其他问题。在下面的函数中,我根据鼠标是进入还是退出来创建或清除超时。不过,似乎即使创建了超时,它在重新进入时也会返回 undefined 。不知道我在这里做错了什么,感谢您的帮助!
JavaScript:(具体问题在 else 第 35 行有条件
var navLinks = $('nav li.sub');
navLinks.mouseenter(function(){
console.log('hovering on link');
var thiis = $(this),
subList = thiis.find('ul'),
autoClose;
if (!thiis.hasClass('out')){
console.log('isnt out');
/* Link */
thiis
/* Show submenu when entering link */
.addClass('out')
/* Hide submenu when exiting link */
.mouseleave(function(){
autoClose = setTimeout(function(){
thiis.removeClass('out');
}, 1000);
console.log('exiting link: timeout active', autoClose);
});
} else {
console.log ('is out', autoClose);
if (autoClose){
console.log('is out: clear timeout');
clearTimeout(autoClose);
}
}
});
【问题讨论】:
-
如所写,
var autoClose确保autoClose是mouseenter处理程序的本地,每次触发时。如果您想从先前的mouseenter事件中获得clearTimeout(autoClose),那么您必须将var autoClose放在外部范围内。因此,相同的autoClose将可用于事件处理程序的每个执行上下文,并且可以根据需要设置/清除。 -
尝试像
navLinks.each(function () { var autoClose; $(this).mouseenter(/**/); });一样包装它 -
@Beetroot-Beetroot 知道了 - 让它成为答案,我愿意接受它
-
@metadings 很棒的提示,谢谢
标签: javascript jquery hover timeout