2016-04-25 123 views
1

我需要一个输入框里面触发或者说dispatchEvent按键响应, 我已经尝试了很多与“initKeyboardEvent”,“initKeyEvent”,“createEvent“,即使我发现类似的问题的答案,但似乎没有工作,既不在Firefox中,也不在铬(我认为他们可能会被弃用),作为 KeyboardEvent.initKeyEvent(),已被弃用。JavaScript的dispatchEvent按键时,返回true,但输入字段仍然是空的

就像我们

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

此代码返回我真的,甚至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); 
+0

'则charCode(“A”)'将调用函数...你需要传递函数表达式... – Rayon

+0

如何添加'onkeydown'事件的DOM元素?像:'' – Jerry

+1

[调用按键事件,而无需实际按下键]的可能的复制(http://stackoverflow.com/questions/10514123/invoking-keypress-event -without-实际上压键) – Boratzan

回答

0

我试图派遣一个输入元素中按键事件来传递数据绑定条件(淘汰赛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); 

所以.value的变化事件一起制成,假的inputText或keyPressed事件成功。

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

addEventListner是在事件触发时进行侦听,我不想在输入字段上侦听,我想触发或分派事件(按键)。 – user5821368

+0

这个链接http://help.dottoro.com/ljrinokx.php帮助你认为是如此 – Rajiv

+1

我已经通过这个链接已经,鼠标事件的作品,但不是键盘事件: var keyEvent = new KeyboardEvent(“keydown”,{key :“a”,char:“a”,shiftKey:true}); document.getElementById('email')。dispatchEvent(keyEvent); 返回true,但不会在给定ID的输入框中输入任何字符。 – user5821368