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

时间:2010-10-29 14:05:28

标签: jquery undefined settimeout

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

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

}

2 个答案:

答案 0 :(得分:4)

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

setTimeout(hoverCheck, 1000);

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

答案 1 :(得分:0)

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

setTimeout("hoverCheck()",1000);

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

可能会有所作为。