【问题标题】:How to trigger a KeyboardEvent in Dart如何在 Dart 中触发键盘事件
【发布时间】:2012-12-30 01:11:40
【问题描述】:

就像我在标题中说的,我想在 Dart 中模拟一个 keyup 事件。问题是我还没有找到如何创建一个新的 KeyboardEvent 对象。

我发现的唯一方法是使用 Event(String type) 构造函数,然后在窗口对象上调度它。但这不起作用,因为我的“keyup”处理程序在参数中接受了一个 KeyboardEvent。示例:

window.on.keyUp.add((KeyboardEvent e){
 print('keyUp handler');
});
KeyboardEvent e = new Event("KeyboardEvent");
window.on.keyUp.dispatch(e);

有没有办法在 Dart 中创建和调度 KeyBoardEvent 来模拟“keyup”?

另外,我应该提到我也尝试在 JavaScript 中触发事件,这要归功于 js-interop 库,但它只触发 JS 处理程序。

【问题讨论】:

    标签: dart


    【解决方案1】:

    试试下面的代码:

    window.on.keyUp.add((Event event){
        print('keyUp handler');
    
        if(event is KeyboardEvent)
        {
          KeyboardEvent keyEvent = event as KeyboardEvent;
          //do stuff with keyEvent if needed
        }  
    });
    
    window.on.keyUp.dispatch(new Event("keyup"));
    

    我认为 Event 构造函数上的参数必须是事件的类型。此外,您可以检查事件是否为键盘事件,例如,您可以处理 KeyIdentifier。

    【讨论】:

    • 此解决方案有效,但不能使用它有两个原因: - 第一个是我必须删除输入 - 第二个是如果您想在处理程序中检索事件的 keyCode 属性(这种情况一直在发生......)这是不可能的,因为它不是键盘事件
    • @mbreton 请考虑一下这个新版本的代码,它是否适合您的需求?
    • 谢谢 Eduardo,但是当我们使用 Event 类型的事件触发 window.on.keyUp 时,这永远不会起作用。我需要触发和 KeyboardEvent 进行单元测试,所以我需要调度一个正确初始化其属性的 KeyboardEvent(我认为主要是 keyCode 值)
    【解决方案2】:

    现在可以从窗口调度 KeyBoardEvent,请参阅 Google Group 上的讨论以获取更多信息:https://groups.google.com/a/dartlang.org/d/topic/misc/mgnd1TUGn68/discussion

    【讨论】:

    • 你成功了吗?我尝试了以下但没有成功: input.onKeyPress.listen((KeyboardEvent e) { if(e.keyCode == html.KeyCode.ENTER) { html.window.dispatchEvent(new html.KeyboardEvent("keypress", keyLocation: html.KeyCode.DOWN)); } });
    猜你喜欢
    • 2011-03-06
    • 2013-10-23
    • 2013-09-22
    • 2019-12-30
    • 2010-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-30
    相关资源
    最近更新 更多