听点击事件JS

时间:2014-11-21 00:42:18

标签: javascript haxe

我试着在Haxe / JS中听点击事件:

static function main()
{
    var initHandler:Dynamic = init;        
    Browser.window.onload = initHandler;
}

static private function init()
{
    var clickHandler:Dynamic = learnBtn;    
    Browser.document.getElementById("readMoreBtn").addEventListener("click", clickHandler);
}

static private function learnBtn()
{
}

我真的需要这一切吗?

为什么我不能这样做(没有initHandlerclickHandler):

Browser.window.onload = init;

OR

Browser.document.getElementById("readMoreBtn").addEventListener("click", learnBtn);
  1. 所有HTML后都没有加载JS文件?我可以定义一下吗?

  2. 它与此主题无关​​,但我尝试谷歌搜索Haxe.org,但没有。它是什么"无类型"关键字。

1 个答案:

答案 0 :(得分:2)

使用Dynamic中间变量间接解决了您的问题,但您应该尝试理解编译器错误消息。

编译器说的是什么:

如果你写:

function init() {
   // do stuff on window.onload
}

Browser.window.onload = init;

编译器会告诉你:

Test.hx:22: characters 68-117 : Void -> Void should be js.html.EventListener
Test.hx:22: characters 68-117 : Void -> Void should be Dynamic -> Void

这是什么意思?这意味着您的init()签名Void->Void应为js.html.EventListeneris defined as Dynamic->Void

正确的代码:

换句话说,你init()函数应该有一个参数,所以应该声明为:

function init(event:Dynamic) {
   // do stuff on window.onload
}

强制编译

您可以告诉编译器让您编写可能不正确(但我们知道有效)的代码:

var foo:Dynamic = init;
Browser.window.onload = foo; // always happy

Browser.window.onload = untyped init; // do not type, please

Browser.window.onload = cast init; // I'm sure I'm right