JavaScript 事件委托(delegate)代码组织

标签 javascript html jquery jquery-events

我正在使用 jQuery(事件委托(delegate))将单击事件绑定(bind)到一个大容器。

我在该容器中有许多可点击的不同项目。

我正在处理的问题是,如果我有 20 个可点击项目,我需要在点击处理程序的容器中执行 if else block x 20。有没有办法让这个更清洁?例如:

attachClickEvent:function(){
    $(".container").click($.proxy(this.handleOnClick,this));
},
handleOnClick:function(event){
     var $target = $(event.target);
     if($target.closest(".widget1").length >0){
         //handle widget 1 interaction
     }else if($target.closest(".widget2").length >0){
         //handle widget 2 interaction
     }else if($target.closest(".widget3").length >0){
         //handle widget 3 interaction
     }else if($target.closest(".widget4").length >0){
         //handle widget 4 interaction
     }else if($target.closest(".widget5").length >0){
         //handle widget 5 interaction
     }
}

等等

最佳答案

首先想到的是使用循环:

var handlers = {
  "widget1": function(event, candidate){},
  "widget2": function(event, candidate){}
}

$.each(handlers, function(cssClass,handler){
  var sel = '.'+cssClass;
  var candidate = target.closest(sel);
  if(candidate.length > 0) {
    handler(event, candidate);
    break;
  }
});

关于JavaScript 事件委托(delegate)代码组织,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5602898/

相关文章:

javascript - 无需服务器端编码的文件操作

javascript - jquery 函数仅在第一次单击时才能正常工作

javascript - 使用react-router获取服务器端数据

javascript - 新滚动器 - 使用 javascript 替换 div 后不滚动

javascript - Firefox 拖放问题

javascript - Rails 3 - Ajax - 需要一些基本 Javascript/Jquery 的帮助

javascript - react native : How do I style NavigationExperimental's NavigationCardStack and NavigationHeader?

javascript - 用于 coffeescript 的 textmate 包

javascript - 如何将JavaScript变量的内容插入到html中的特定位置?

css - 网格系统 Bootstrap 4 - 内联