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)
我认为这是一个浏览器错误,因为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)