Javascript中的多事件侦听器
如何在同一初始化中添加多个事件侦听器 例如:Javascript中的多事件侦听器,javascript,dom-events,Javascript,Dom Events,如何在同一初始化中添加多个事件侦听器 例如: <input type="text" id="text"> <button id="button_click">Search</button> 这是正常工作,但我想有另一个事件监听器为这个输入文件在同一个调用,如果可能的话,所以当用户点击进入或按下按钮,它触发相同的事件监听器 就一张纸条。用户需要关注输入字段以触发“回车”事件。尝试以下操作: function addMultipleEvents(element
<input type="text" id="text">
<button id="button_click">Search</button>
这是正常工作,但我想有另一个事件监听器为这个输入文件在同一个调用,如果可能的话,所以当用户点击进入或按下按钮,它触发相同的事件监听器
就一张纸条。用户需要关注输入字段以触发“回车”事件。尝试以下操作:
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');
函数添加多个事件(元素、事件){
var标记=events.split(“”);
if(tokens.length==elements.length){
for(var i=0;i
更新:
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");
}
}
函数添加多个事件(元素、事件){
var标记=events.split(“”);
if(tokens.length==elements.length){
for(var i=0;i
只需将函数绑定到2个侦听器,每个侦听器都是所需的元素:
document.getElementById('button_click').addEventListener('click', myFunc);
document.getElementById('text').addEventListener('keyup', keyupFunc);
如果用户按下enter键,然后执行其他功能,则新功能测试:
function keyupFunc(evt) {
if(evt.keyCode === 13) // keycode for return
myFunc();
}
使用JSFIDLE:我认为最好的方法是使用for循环
const events=[“单击”,“鼠标悬停”]
对于(事件中的i){
document.getElementById(“按钮点击”).addEventListener(事件[i],()=>myFunc())
}
addEventListener的签名是('click',myFunc)。我不确定是否正确理解了这个问题,但是我猜OP意味着enter
事件应该在input
元素上触发,就好像click
事件将由按钮元素触发一样…@SamuelCaillerie我需要的正是你所说的将keyup
事件添加到按钮上,这似乎有点奇怪,不是吗?我认为两个处理程序的解耦(但只调用一个函数)更好…@SamuelCaillerie我不是在按钮中添加keyup
事件。我将事件并行地添加到对象数组中。OP希望调用相同的函数。所以,我就这样做了。我的意思是将if
条件保留在myFunc
中,而不是将其保留在外。总的来说,它看起来很奇怪,但确实有效。“”)当我放置警报()时,未触发此键码顶部的inside keyupFunc警报被触发…因此它基本上进入函数内部,但不传递此if语句..有什么想法吗?明白了!问题出在==
中,当我执行==
时,一切都正常ok@user123_456:是的,对不起,我最初以为keyCode
是一个字符串,但它是一个数字,所以evt.keyCode===13
应该可以工作。但是你可以使用==
它删除对类型的检查。。。
function keyupFunc(evt) {
if(evt.keyCode === 13) // keycode for return
myFunc();
}