2012-05-31 28 views
0

我想做一些我认为很简单但我需要帮助的东西。不能在jquery里面定义一个函数? ... undefined

一个jQuery功能我想设置一个计时器,并从另一个函数清除它里面....

(function($){ 

var mnuTimer; 
var mnuDown; 

$('.nav-menu .parent').hover(function(){ 
    clearTimeout(mnuTimer);//clear function 
    $(this).children('.children').slideDown(); 
    $(this).css('background-color','#fff0c8'); 
}, 
function(){ 
    function mnuDown(){//set function for timer experation 
     $(this).children('.children').slideUp('fast'); 
     $(this).css('background-color','transparent'); 
     } 
    mnuTimer = setTimeout("mnuDown()",1000)//timer 
}); 

})(jQuery); 

所以我不能获得工作的唯一部分是定时器。 “mnuDown”函数出现未定义。我已经尝试了很多不同的方式来使它工作,没有什么似乎是正确的,除了声明jquery之外的函数“(function($){”。这不会工作,因为我使用jQuery的全部原因是应用效果基本show动画是不可用之外的jQuery AHHH帮助,感谢

+1

这是因为字符串'“mnuDown()”'在全局范围内被评估。虽然'mnuDown'不是全球性的。 –

+0

通常,最好在'setTimeout'中使用函数引用,而不是代码字符串。使用'setTimeout(mnuDown,1000)',** not **'setTimeout(“mnuDown()”,1000)'。这也解决了你目前的问题。 – apsillers

+0

_“无法在jQuery中定义函数?”_ - Felix的链接会给你答案,但请注意,这与你是否使用jQuery无关,在JavaScript中这只是正常的,正确的行为。 – nnnnnn

回答

2

人云亦云this answer

是的,不是函数的声明引用它的问题,但[变量]:你没有,相反,setTimeout("mnuDown()",1000)将在全球范围内的代码字符串 - 没有mnuDown在那里被发现。 ou需要将函数引用传递给setTimout()

mnuTimer = setTimeout(mnuDown,1000); //timer 
+0

感谢您帮助您解决问题。此外,我在我的mnuDown函数中有一个错误。我正在使用$(this),它是空的。 – user1019416