JavaScript事件委托代码组织

Aba*_*aba 6 html javascript jquery javascript-events

我使用jquery(事件委托)将单击事件绑定到一个大容器.

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

我正在处理的问题是,如果我有20个可点击的项目,我需要在点击处理程序的容器中执行if else块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
     }
}
Run Code Online (Sandbox Code Playgroud)

等等

pro*_*son 2

首先想到的是使用循环:

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;
  }
});
Run Code Online (Sandbox Code Playgroud)