首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将多个事件侦听器添加到一个元素

将多个事件侦听器添加到一个元素
EN

Stack Overflow用户
提问于 2012-08-07 20:11:06
回答 13查看 161.9K关注 0票数 76

所以我的困境是,我不想把相同的代码写两次。一次用于click事件,另一次用于touchstart事件。

以下是原始代码:

代码语言:javascript
复制
document.getElementById('first').addEventListener('touchstart', function(event) {
    do_something();
    });

document.getElementById('first').addEventListener('click', function(event) {
    do_something(); 
    });

我如何压缩它?必须有一种更简单的方法!

EN

回答 13

Stack Overflow用户

发布于 2017-03-26 04:00:28

我知道这是一个古老的问题,但我认为有些人可能会发现这种方法很有用;它可以应用于任何类似的重复代码:

ES6

代码语言:javascript
复制
['click','ontouchstart'].forEach( evt => 
    element.addEventListener(evt, dosomething, false)
);

ES5

代码语言:javascript
复制
['click','ontouchstart'].forEach( function(evt) {
    element.addEventListener(evt, dosomething, false);
});
票数 165
EN

Stack Overflow用户

发布于 2012-08-07 20:13:03

您可以只定义一个函数并传递它。匿名函数没有任何特殊之处,所有函数都可以作为值传递。

代码语言:javascript
复制
var elem = document.getElementById('first');

elem.addEventListener('touchstart', handler, false);
elem.addEventListener('click', handler, false);

function handler(event) {
    do_something();
}
票数 23
EN

Stack Overflow用户

发布于 2012-08-07 20:13:58

除非您的do_something函数实际对任何给定的参数执行某些操作,否则您可以将其作为事件处理程序进行传递。

代码语言:javascript
复制
var first = document.getElementById('first');
first.addEventListener('touchstart', do_something, false);
first.addEventListener('click', do_something, false);
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11845678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档