javascriptdispatchEventKeypress,返回 true ,但输入字段仍然为空

问题描述 投票:0回答:3

我需要在输入框中触发或说出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);

此代码返回 true ,甚至 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 );
javascript keyevent
3个回答
4
投票

我试图在输入元素内调度 keyPress 事件来传递数据绑定条件(KnockOut js)事件,但不幸的是 KeyPress 对我不起作用,而是我使用更改事件代替它。

所以我这样做了:

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

所以 .valuechange 事件一起制作,假的 inputText 或按键事件成功。


0
投票

我想就像你想在输入框上添加事件监听器

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

0
投票

initEvent 已被弃用或即将被删除。相反,您可以像这样使用它:

element = document.getElementById('idTxtBx_SAOTCS_ProofConfirmation');
element.value = '8885';   // this alone was not working as keypress.

const evt = new Event("change", {
    bubbles: false,
    cancelable: true
});

element.dispatchEvent(evt);
© www.soinside.com 2019 - 2024. All rights reserved.