2016-04-25 126 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