模拟输入JavaScript
问题描述:
我试图模拟在JavaScript
在一个特定TextArea
。 代码:模拟输入JavaScript
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);
}
TextArea
:
<textarea id="text"> </textarea>
当我打电话ENTER1()什么都不干的textarea的。为什么?
答
我认为这是一个浏览器bug,因为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);
}
另一种解决方案是KeyboardEvent Constructor。只要注意兼容性问题。
function enter1() {
var keyboardEvent = new KeyboardEvent('keydown');
delete keyboardEvent.which;
keyboardEvent.which = 13;
document.getElementById('text').dispatchEvent(keyboardEvent);
}
+0
我编辑的代码,但没有改变。 感谢您的回答。 –
+0
@LucaLaiton您可以尝试手动分配'keyboardEvent.which = 13;'而不是将键码传递给'initMethod'。 – Lewis
+0
function premi_enter() { var keyboardEvent = document.createEvent('KeyboardEvent'); delete keyboardEvent.which; keyboardEvent.which = 13; document.getElementById('text').dispatchEvent(keyboardEvent); }
–
[这里](http://*.com/questions/961532/firing-a-keyboard-event-in-javascript),[这里](http://*.com/questions/10455626/keydown-simulation-in-chrome-fires-normally-but-the-the-correct-key) – AvrilAlejandro
@avrilalejandro感谢艾薇儿的支持,但是每个功能都没有通过“回车”。我不明白。 –