2013-06-13 248 views
1

如何在相同的初始化中添加多個事件偵聽器?javascript中的多個事件偵聽器

例如:

<input type="text" id="text"> 
<button id="button_click">Search</button> 

的JavaScript:

var myElement = document.getElementById('button_click'); 
myElement.addEventListener('click', myFunc()); 

這是正常工作,但是我想有此輸入在同一呼叫提起另一個事件偵聽器,如果這是可能的,所以當用戶點擊進入或按下按鈕時,它觸發相同的事件監聽器。

只是一個音符。用戶需要專注於輸入字段以觸發「輸入」事件。

+0

爲的addEventListener簽名(「點擊」,myFunc的) – Neil

回答

2

您的功能只需綁定到2個監聽器,所希望的元素中的每一個:

document.getElementById('button_click').addEventListener('click', myFunc); 
document.getElementById('text').addEventListener('keyup', keyupFunc); 

其中新功能測試,如果按用戶輸入,然後執行其他功能:

function keyupFunc(evt) { 
    if(evt.keyCode === 13) // keycode for return 
     myFunc(); 
} 

工作的jsfiddle:http://jsfiddle.net/cG7HW/

+0

這個keyCode沒有被觸發...當我把alertup()放在keyupFunc裏面的最高警報觸發時...基本上它是在函數內部傳遞,但是不傳遞這個if語句..任何想法? –

+0

got它!問題出現在'==='中,當我做了== =='一切正常時 –

+0

@ user123_456:對不起,我最初認爲'keyCode'是一個字符串,但它是一個數字,所以'evt.keyCode == = 13'應該可以工作,但是你可以使用'=='它刪除檢查類型... –

0

試試這個:

function addMultipleEvents(elements, events){ 
     var tokens = events.split(" "); 
     if(tokens.length == elements.length){ 
      for(var i = 0; i< tokens.length; i++){ 
       elements[i].addEventListener(tokens[i], (e.which == 13 || e.which == 48)?myFunc:); //not myFunc() 
      } 
     } 
} 

var textObj = document.getElementById("textId"); 
var btnObj = document.getElementById("btnId"); 
addMultipleEvents([textObj,btnObj], 'click keyup'); 

UPDATE

function addMultipleEvents(elements, events) { 
     var tokens = events.split(" "); 
     if (tokens.length == elements.length) { 
      for (var i = 0; i < tokens.length; i++) { 
       elements[i].addEventListener(tokens[i], myFunc); //not myFunc() 
      } 
     } 
    } 

    var textObj = document.getElementById("textId"); 
    var btnObj = document.getElementById("btnId"); 
    addMultipleEvents([btnObj, textObj], 'click keyup'); 

    function myFunc(e) { 
     if (e.which == 13 || e.which == 1) { 
      alert("hello"); 
     } 
    } 

Working Fiddle

+0

我不是一定要正確理解這個問題,但我想OP意味着應該在'input'元素上觸發'enter'事件,就好像'click'事件將被'button'元素觸發...... –

+0

@ SamuelCaillerie我需要你所說的 –

+0

@SamuelCaillerie是我誤解了。更新.. –