有没有一种不循环可以给多元素绑定相同事件的写法?

假如有两个含有ID的元素,有没有一种可以同时给两个元素绑定相同事件的方法。
循环有点不太划算。但是复制两段看的又不舒服。原谅我的代码洁癖。。


谢谢大家这么多好点子。

阅读 6.3k
13 个回答

哪有那么麻烦

$('#id1,#id2').on('click',function(e){
    console.log(this.id);
});

用事件委托啊

。。简直是想要马儿跑,又不给马儿吃草的想法。。
最好看一点可能是。

function a() {}
b.onclick = a;
c.onclick = a;

或是用个jquery,然后加个统一的class例如为one,然后$('.one').on("click", a);,虽然实际上jq帮你循环了,但是你看不到。

在洁癖的代码,如果只有两个elem需要加事件,封装一个回调函数,然后写上去就行了。

再简洁一点的做法,把addEventListener()这样的操作也封装到函数中。

function callback(event){};

function bindEvent(elem,even,callback){
    elem.addEventListener(even, callback(event){}) // 举个例子而已
}

封装插件啊

封装成一个方法,传值调用

使用事件委托呀:绑定一个事件到所有目标元素的父元素上,当事件冒泡到父元素上的时候,判断event的target属性,如果是目标的话就执行。
jQuery也提供了$('#parent').on('click', '.child', function() {})的方法来实现事件委托。

jquery 通过属性绑定事件

如果业务逻辑允许的话最好避免给多个元素绑定相同的事件,尝试下用事件委托来实现需求。

如果只是要不循环多个元素绑定多个事件的写法的话,要是有两个不同的id,那直接
$('#elem1','#elem2').on('click',function(){

.....(操作)

})
要是两个id元素有关系的话,利用事件冒泡里将目标元素绑定到公共的父级元素里就好了

你在每个地方加相同的class名,用class名绑定,而不是ID绑定就可以了

我跟楼上想的一样

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题