我有一个包含子菜单的导航菜单。在悬停时我希望子菜单在第二次延迟后显示。标有“更多”类的菜单项包含子菜单。
问题是我的一个名为hoverCheck()的函数在被调用时会返回undefined。但我无法弄清楚原因。
这是我的代码:
$(document).ready(function() {
navigation();
});
function navigation() {
var moreMenu = $('.nav li.more');
var hovering;
function hoverCheck() {
hovering = 'hover';
openMenu();
}
function openMenu() {
if(hovering == 'hover') {
$(this).children('ul').slideDown('fast');
}
}
moreMenu.mouseenter(function() {
setTimeout("hoverCheck()",1000);
});
moreMenu.mouseleave(function() {
hovering = null;
$(this).children('ul').slideUp('fast');
});
}
答案 0 :(得分:4)
您收到错误,因为该功能未在全局范围内定义,而应该执行此操作:
setTimeout(hoverCheck, 1000);
作为一般规则,尽量避免将字符串传递给setTimeout()
,直接给它一个函数引用 - 否则你可能会遇到范围问题,就像这样:)
答案 1 :(得分:0)
setTimeout函数将表达式作为第一个参数,而不是函数的名称。如果你替换
setTimeout("hoverCheck()",1000);
带
setTimeout(function() {hoverCheck();}, 1000);
可能会有所作为。