基本上我有这个功能:
private function clickURL(url:String):Function{
trace("Function has been instantiated");
return function(event:MouseEvent):void{
trace("Function has been run");
ExternalNavigation.newBrowserWindow(url);
}
}
这个函数的目的是获取一个url,将url放在另一个函数中并将该函数传回去,这样我就可以输入:
urlButton.addEventListener(MouseEvent.CLICK, clickURL("http://test.com"));
函数clickURL会将带有event参数的函数返回给addEventListener函数。以这种方式,我指定按下按钮时将打开的URL。
以下是使用它时会发生什么的输出:
//Function has been instantiated
单击按钮时,internatl函数永远不会运行。所以我想我会用假事件试一试,以确保我没有错过任何东西。
var clickTest:Function = clickURL("http://stackoverflow.com");
clickTest(new MouseEvent(MouseEvent.CLICK));
这是输出:
//Function has been instantiated
//Function has been run
如您所见,两个函数都已运行。有没有人知道为什么这是有效的而不是addEventListener?
此致 ž
答案 0 :(得分:1)
这应该没有问题......
如果你urlButton.addEventListener(MouseEvent.CLICK, trace);
并点击按钮,你会得到任何痕迹吗?
编辑:
我真的无法重现它......这里有一些完美无缺的代码:
package {
import flash.display.*;
import flash.events.*;
public class Main extends Sprite {
private var urlButton:Sprite;
public function Main():void {
this.addChild(this.urlButton = new Sprite());
this.urlButton.graphics.beginFill(0xFF00FF);
this.urlButton.graphics.drawRect(0, 0, 200, 50);
urlButton.buttonMode = true;
urlButton.addEventListener(MouseEvent.CLICK, clickURL("http://test.com"));
}
private function clickURL(url:String):Function{
trace("Function has been instantiated");
return function(event:MouseEvent):void{
trace("Function has been run");
}
}
}
}
你可以发布/上传一个最小的设置,它不起作用吗?
格尔茨
back2dos
答案 1 :(得分:-1)
正如您所演示的那样,当事件被触发时,侦听器会按预期设置并执行,因此如果您的按钮没有正确触发事件,那么按钮可能存在问题?