javascript - jQuery 中的事件委托(delegate),怎么做?

标签 javascript jquery events event-delegation

在 JavaScript 中,我曾经使用这样的事件委托(delegate):

someDiv.addEventListener('click', function(evt){
    if(evt.target.id == "#someChild"){
       // Do something..
    } else if(evt.target.id == "#anotherChild"){
       // Do something else..
    }
}, false);

jQuery 中与此等效的是什么?我知道 .on() 但如何在事件委托(delegate)中使用它?我的意思是这是怎么做到的:

someDiv.on('click, '#someChild, #anotherChild", function(evt){
      if($(this).is("#someChild")){ 
           // Do something..
      } else if($(this).is("#anotherChild")){
           // Do something else ..
      }      
});

但是它不是和普通 JavaScript 中的一样吗?我想知道是否有更好的方法来实现它。如果这是唯一的方法,那么 jQuery 方法相对于 JS 方法有什么好处?

最佳答案

你可以这样做:

$(someDiv).on('click', '#someChild, #anotherChild', function(){
    if(this.id ==='someChild'){ 
       // Do something..
    } else if(this.id === 'anotherChild'){
       // Do something else ..
    }      
});

或者,如果您对两个元素执行不同的操作,则创建两个事件处理程序:

$(someDiv).on('click', '#someChild', function(){
     // Do something..    
}).on('click', '#anotherChild', function() {
     // Do something else ..
});

But wouldn't it be just the same as in vanilla JavaScript ? I want to know if there's a better way to achieve it. And if this is the only way, what's the benefit of jQuery way over JS one ?

当然,它基本上是相同的,jQuery 只是通过提供 DOM API 的包装器让您的生活变得更轻松,但它不会改变 DOM 的工作方式。

但有一个区别,即 this 将引用选择器匹配的元素,而不是处理程序绑定(bind)到的元素。

总的来说,优点是 jQuery 代码比使用 addEventListener 更具跨浏览器兼容性。

关于javascript - jQuery 中的事件委托(delegate),怎么做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12230057/

相关文章:

jquery - 更改 select 的父 li 元素类

jquery - 当光标仍在元素上方时,mouseleave 在 IE7 中触发

javascript - 如何从不同输入的模态中获取值

javascript - 在 jQuery 中一次将元素从一列移动到另外两列?

javascript - 如何在拖动时更改可排序元素的样式?

javascript - R 中使用 HTML Widget 的迷你图

php - 为什么我的事件监听器没有在 Laravel 5 中触发?

加载事件后的 VB.NET .NET?

javascript - 正在分配的内存

javascript - 当数据库返回值时如何更新我的html?