模拟在JavaScript中输入

Luc*_*ton 6 html javascript enter keyboard-events dom-events

我尝试在特定的模拟Enter中.这是我的代码:JavaScriptTextArea

 function enter1() {
       var keyboardEvent = document.createEvent('KeyboardEvent'); 
       var initMethod = typeof keyboardEvent.initKeyboardEvent !== 'undefined' ? 'initKeyboardEvent' : 'initKeyEvent'; 
       keyboardEvent[initMethod]('keydown', // event type : keydown, keyup, keypress
            true, // bubbles
            true, // cancelable
            window, // viewArg: should be window
            false, // ctrlKeyArg
            false, // altKeyArg
            false, // shiftKeyArg
            false, // metaKeyArg
            13, // keyCodeArg : unsigned long the virtual key code, else 0
            13 // charCodeArgs : unsigned long the Unicode character associated with the depressed key, else 0
       );
       document.getElementById('text').dispatchEvent(keyboardEvent);
 }
Run Code Online (Sandbox Code Playgroud)

TextArea:

<textarea id="text"> </textarea>
Run Code Online (Sandbox Code Playgroud)

当我调用enter1()时,它不会执行任何操作TextArea.为什么是这样?

小智 15

对于调度事件时遇到问题的任何人,请尝试添加键值对bubbles: true

const keyboardEvent = new KeyboardEvent('keydown', {
    code: 'Enter',
    key: 'Enter',
    charCode: 13,
    keyCode: 13,
    view: window,
    bubbles: true
});
Run Code Online (Sandbox Code Playgroud)


Lew*_*wis 2

我认为这是一个浏览器错误,因为keyboardEvent.which它是不可写的。为了修复它,您必须keyboardEvent.which在分配键码之前删除属性。

 function enter1() {
   var keyboardEvent = document.createEvent('KeyboardEvent');
   delete keyboardEvent.which;
   var initMethod = typeof keyboardEvent.initKeyboardEvent !== 'undefined' ? 'initKeyboardEvent' : 'initKeyEvent';
   keyboardEvent[initMethod](
     'keydown', // event type : keydown, keyup, keypress
     true, // bubbles
     true, // cancelable
     window, // viewArg: should be window
     false, // ctrlKeyArg
     false, // altKeyArg
     false, // shiftKeyArg
     false, // metaKeyArg
     13, // keyCodeArg : unsigned long the virtual key code, else 0
     13 // charCodeArgs : unsigned long the Unicode character associated with the depressed key, else 0
   );
   document.getElementById('text').dispatchEvent(keyboardEvent);
 }
Run Code Online (Sandbox Code Playgroud)

另一种解决方案是KeyboardEvent Constructor。只是要注意兼容性问题。

 function enter1() {
   var keyboardEvent = new KeyboardEvent('keydown');
   delete keyboardEvent.which;
   keyboardEvent.which = 13;
   document.getElementById('text').dispatchEvent(keyboardEvent);
 }
Run Code Online (Sandbox Code Playgroud)