4

我正在尝试在 Web 应用程序中模拟按键,它适用于嵌入式系统,但它使用 Webkit 派生的浏览器。我已经在 Chrome 中测试了代码并得到了同样的错误。

我尝试使用来自Yahoo的此示例中的代码片段,但在使用dispatchEvent. “target”是 DOM 树中的一个 HTML 元素。

function fireEvent(target) {
    var evt = document.createEvent("UIEvent");
    evt.initEvent("keypress", true, true);
    target.dispatchEvent(evt);
}

它总是抛出:

“错误:UNSPECIFIED_EVENT_TYPE_ERR:DOM 事件异常 0”

我也试过createEvent("Events")了,它总是归结为同样的例外,无论是在嵌入式系统上还是在 Chrome 中。

4

3 回答 3

4

好的,在进行进一步测试时,似乎当所有关键事件参数都正确初始化后,dispatchEvent 就可以正常工作而不会引发异常。

以下代码有效。

function fireEvent(target) {
    var evt = document.createEvent("Events");
    evt.initEvent("keypress", true, true);

    evt.view = window;
    evt.altKey = false;
    evt.ctrlKey = false;
    evt.shiftKey = false;
    evt.metaKey = false;
    evt.keyCode = 0;
    evt.charCode = 'a';

    target.dispatchEvent(evt);
}
于 2010-11-02T15:57:36.970 回答
2

按键是一个UIEvent. 您应该使用initUIEvent( 'type', bubbles, cancelable, windowObject, detail )而不是initEvent(). 但是对于实现 a 的 Firefox,keyEvents您应该创建一个KeyEventsand initKeyEvents()

于 2012-04-04T22:27:55.860 回答
0

这是旧线程,只是为了更新它,我添加了另一个答案,以便对任何人都更有意义。

initEvent() 已弃用它在某些浏览器中仍受支持,但请避免使用它。

有更好的简洁方式来创建这样的事件

  function fireEvent(target) {
   var event = new Event('build');

   // Listen for the event.
   target.addEventListener('build', function (e) { ... }, false);

   // Dispatch the event.
    target.dispatchEvent(event);
}

要向事件对象添加更多数据,存在 CustomEvent 接口,并且可以使用 detail 属性来传递自定义数据。例如,可以按如下方式创建事件:

var event = new CustomEvent('build', { 'detail': target.dataset.time });

参考:创建和触发事件

于 2017-03-02T07:54:07.167 回答