代码之家  ›  专栏  ›  技术社区  ›  Ernelli

document.createEvent应该如何处理关键事件?

  •  4
  • Ernelli  · 技术社区  · 14 年前

    我试图在一个web应用程序中模拟按键,这是一个嵌入式系统,但它使用一个Webkit派生的浏览器。我在Chrome中测试了代码,得到了同样的错误。

    Yahoo ,但在使用 dispatchEvent . "target”是DOM树中的HTML元素。

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

    它总是抛出:

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

    3 回复  |  直到 5 年前
        1
  •  3
  •   ruakh Sivagopal Manpragada    10 年前

    好的,在做进一步的测试时,似乎当所有的关键事件参数都正确初始化时,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);
    }
    
        2
  •  2
  •   antyrat Andy    12 年前

    按键是 UIEvent initUIEvent( 'type', bubbles, cancelable, windowObject, detail ) 而不是 initEvent() . 但是对于firefox,它实现了 keyEvents ,您应该创建 KeyEvents initKeyEvents() .

        3
  •  0
  •   Shad    7 年前

    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);
    }
    

    例如,可以按如下方式创建事件:

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

    Creating and Triggering Events

    推荐文章