2013-06-13 138 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是我误解了。更新.. –