嵌套函数中的事件监听器

时间:2012-03-12 17:40:19

标签: actionscript-3 function addeventlistener nested-function

我在函数之外有一些MouseEvent侦听器,它包含需要使用附加到侦听器的函数的嵌套函数。

button1.addEventListener(MouseEvent.ROLL_OVER, buttonOver); 

function navigation (): void {

    if statements;

    function buttonOver(event:MouseEvent):void {
        movieclip.play();
    }
}

我一直收到“1120:访问未定义属性buttonOver”错误。我知道这是因为EventListener不在函数“navigation”中,但我需要稍后通过其他函数访问它。我是不是错了?

5 个答案:

答案 0 :(得分:1)

那不行。我不认为你应该嵌套功能。为什么不使用可以从其他类/实例访问的类?

罗布

答案 1 :(得分:1)

忘记嵌套和匿名函数。而且忘了在框架中编写代码。您可以在不使用它们的情况下完成所需的一切。

答案 2 :(得分:0)

我不确定为什么你首先需要嵌套函数。没有嵌套,一切都会轻松得多。

button1.addEventListener(MouseEvent.ROLL_OVER, buttonOver); 

function navigation (): void {

    if statements;
}
function buttonOver(event:MouseEvent):void {
    movieclip.play();
}

答案 3 :(得分:0)

我不确定但是您可能希望根据某些条件添加然后删除事件监听器?

当我看到他们试图嵌套事件处理程序时,这对于初学者来说是最常见的错误。

function navigation (): void {
    if (somethingTrue){
        button1.addEventListener(MouseEvent.ROLL_OVER, buttonOver); 
    else if(somethingElseTrue){
        button1.removeEventListener(MouseEvent.ROLL_OVER, buttonOver);
    }  
}

function buttonOver(event:MouseEvent):void {
    movieclip.play();
}

答案 4 :(得分:0)

正如其他答案所提到的,您的嵌套函数仅限于它所定义的函数的范围。您在该函数之外访问它的尝试将引发错误。以下相关的Adobe文档:

http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7f54.html

将嵌套函数移动到嵌套函数之外,或更改监听器以调用navigation并让navigation调用buttonOver