为什么firebug说我的函数调用是“未定义的”

我有一个包含子菜单的导航菜单。 在hover时我希望子菜单在第二次延迟后显示。 标有“更多”类的菜单项包含子菜单。

问题是我的一个名为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'); }); } 

您收到错误是因为该函数未在全局范围内定义,而是应该执行此操作:

 setTimeout(hoverCheck, 1000); 

作为一般规则,尽量避免将字符串传递给setTimeout() ,直接给它一个函数引用 – 否则你可能会遇到范围问题,就像这样:)

setTimeout函数将表达式作为第一个参数,而不是函数的名称。 如果你更换

 setTimeout("hoverCheck()",1000); 

 setTimeout(function() {hoverCheck();}, 1000); 

这可能会成功。