javascript dispatchEvent Keypress,returns true ,但输入字段仍然为空
javascript dispatchEvent Keypress, returns true , but input field is still empty
我需要在输入框中触发或说出 dispatchEvent KeyPress,
我已经尝试了很多“initKeyboardEvent”、“initKeyEvent”、“createEvent”,甚至我找到了类似问题的答案,但似乎没有任何效果,无论是在 firefox 中,还是在 chrome 中(我认为它们可能已被弃用),因为
KeyboardEvent.initKeyEvent(),已弃用。
就像我们有
document.getElemntByID('button').click();
我想做类似的事情:
document.getElemntById('email').keyPress(charCode('a'));
但不幸的是,我无法以任何方式使按键工作。
我知道在 jQuery 中是可能的,但我想在纯 javascript 中进行,毕竟 jquery 在后端使用 Javascript,所以必须是个办法,如果我没记错的话。
====更新=========
我想知道
window.addEventListener('keydown', keyDown(), true);
function keyDown(){
alert('keydown');
}
var fireOnThis = document.getElementById('pwph');
if( window.KeyEvent ) {
var evObj = document.createEvent('KeyEvents');
evObj.initKeyEvent( 'keydown', true, true, window, false, false, false, false, 72, 0 );
} else {
var evObj = document.createEvent('UIEvents');
evObj.initUIEvent( 'keydown', true, true, window, 1 );
evObj.keyCode = 72;
}
fireOnThis.dispatchEvent(evObj);
这段代码returns我是真的,连eventListner都在捕捉这个事件,那为什么我在输入框中看不到任何文字?
====================更新============================
这似乎对每个人都有效,但为什么即使在返回 true 后它仍将我的文本字段留空?
// Create the event
var evt = document.createEvent( 'KeyboardEvent' );
// Init the options
evt.initKeyEvent(
"keypress", // the kind of event
true, // boolean "can it bubble?"
true, // boolean "can it be cancelled?"
null, // specifies the view context (usually window or null)
false, // boolean "Ctrl key?"
false, // boolean "Alt key?"
false, // Boolean "Shift key?"
false, // Boolean "Meta key?"
9, // the keyCode
0); // the charCode
// Dispatch the event on the element
el.dispatchEvent( evt );
我想你想在输入框上添加事件监听器
var element = document.getElementById("email");
document.getElementById("email").addEventListener("keypress", function() {
console.log("keypresh")
})
var evt = document.createEvent("KeyboardEvent");
evt.initEvent("keypress", false, true);
// adding this created a magic and passes it as if keypressed
element.dispatchEvent(evt);
我试图在 Input 元素内调度 keyPress 事件以传递数据绑定条件(KnockOut js)事件,但不幸的是 KeyPress 对我不起作用,而是我使用 change 事件代替它。
所以我这样做了:
element = document.getElementById('idTxtBx_SAOTCS_ProofConfirmation');
element.value = '8885'; // this alone was not working as keypress.
var evt = document.createEvent("HTMLEvents");
evt.initEvent("change", false, true); // adding this created a magic and passes it as if keypressed
element.dispatchEvent(evt);
所以 .value 和 change 事件一起发生,伪造的 inputText 或按键事件成功。
我需要在输入框中触发或说出 dispatchEvent KeyPress, 我已经尝试了很多“initKeyboardEvent”、“initKeyEvent”、“createEvent”,甚至我找到了类似问题的答案,但似乎没有任何效果,无论是在 firefox 中,还是在 chrome 中(我认为它们可能已被弃用),因为 KeyboardEvent.initKeyEvent(),已弃用。
就像我们有
document.getElemntByID('button').click();
我想做类似的事情:
document.getElemntById('email').keyPress(charCode('a'));
但不幸的是,我无法以任何方式使按键工作。
我知道在 jQuery 中是可能的,但我想在纯 javascript 中进行,毕竟 jquery 在后端使用 Javascript,所以必须是个办法,如果我没记错的话。
====更新=========
我想知道
window.addEventListener('keydown', keyDown(), true);
function keyDown(){
alert('keydown');
}
var fireOnThis = document.getElementById('pwph');
if( window.KeyEvent ) {
var evObj = document.createEvent('KeyEvents');
evObj.initKeyEvent( 'keydown', true, true, window, false, false, false, false, 72, 0 );
} else {
var evObj = document.createEvent('UIEvents');
evObj.initUIEvent( 'keydown', true, true, window, 1 );
evObj.keyCode = 72;
}
fireOnThis.dispatchEvent(evObj);
这段代码returns我是真的,连eventListner都在捕捉这个事件,那为什么我在输入框中看不到任何文字?
====================更新============================
这似乎对每个人都有效,但为什么即使在返回 true 后它仍将我的文本字段留空?
// Create the event
var evt = document.createEvent( 'KeyboardEvent' );
// Init the options
evt.initKeyEvent(
"keypress", // the kind of event
true, // boolean "can it bubble?"
true, // boolean "can it be cancelled?"
null, // specifies the view context (usually window or null)
false, // boolean "Ctrl key?"
false, // boolean "Alt key?"
false, // Boolean "Shift key?"
false, // Boolean "Meta key?"
9, // the keyCode
0); // the charCode
// Dispatch the event on the element
el.dispatchEvent( evt );
我想你想在输入框上添加事件监听器
var element = document.getElementById("email");
document.getElementById("email").addEventListener("keypress", function() {
console.log("keypresh")
})
var evt = document.createEvent("KeyboardEvent");
evt.initEvent("keypress", false, true);
// adding this created a magic and passes it as if keypressed
element.dispatchEvent(evt);
我试图在 Input 元素内调度 keyPress 事件以传递数据绑定条件(KnockOut js)事件,但不幸的是 KeyPress 对我不起作用,而是我使用 change 事件代替它。
所以我这样做了:
element = document.getElementById('idTxtBx_SAOTCS_ProofConfirmation');
element.value = '8885'; // this alone was not working as keypress.
var evt = document.createEvent("HTMLEvents");
evt.initEvent("change", false, true); // adding this created a magic and passes it as if keypressed
element.dispatchEvent(evt);
所以 .value 和 change 事件一起发生,伪造的 inputText 或按键事件成功。