侦听单击事件 JS

listen to click event JS

本文关键字:JS 事件 单击      更新时间:2023-09-26

我试图在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;

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

  2. 它与这个主题无关,但我试图谷歌搜索 Haxe.org 但什么都没有。 什么是"未键入"关键字。

使用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.EventListener的,定义为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