我正在尝试模拟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中都有。
答案 0 :(得分:3)
好的,在进行进一步测试时,似乎所有关键事件参数都已正确初始化,然后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);
}
答案 1 :(得分:2)
Keypress是UIEvent
。您应该使用initUIEvent( 'type', bubbles, cancelable, windowObject, detail )
而不是initEvent()
。但是对于实现keyEvents
的firefox,您应该创建KeyEvents
和initKeyEvents()
。
答案 2 :(得分: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 });