【问题标题】:listen to click event JS监听点击事件JS
【发布时间】:2014-11-21 00:42:17
【问题描述】:

我尝试在 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()
{
}

我真的需要这一切吗?

为什么我不能这样做(没有initHandler 和clickHandler):

Browser.window.onload = init;

或

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

  2. 它与此主题无关​​,但我尝试在 Haxe.org 中搜索和搜索,但没有。什么是“无类型”关键字。

【问题讨论】:

标签: javascript haxe


【解决方案1】:

使用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,它是is defined asDynamic->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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-06
    • 2012-11-27
    • 2012-09-19
    • 1970-01-01
    • 2018-02-11
    • 2021-10-13
    相关资源
    最近更新 更多