我使用jquery(事件代理)将一个单击事件绑定到一个大容器。JavaScript事件代理组织代码
我在该容器中有许多不同的项目可点击。
我正在处理的问题是,如果我有20个可点击的项目,我需要在点击处理程序的容器上做一个if else块x 20。有没有办法让这个更清洁? E.g:
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
}
}
等
这也是我的想法,谢谢。 – Abadaba 2011-04-09 05:25:36
您使用的目标意味着您正在点击处理程序中运行此循环。这是不好的,因为您必须运行$(target).closest()潜在的20多次才能找到匹配的属性。您还使用'class'关键字,它将在webkit中禁用。 – typeof 2011-04-09 18:44:24
@typeof:它在click处理程序中运行......他正在委托给包含一组20个项目的父元素,每个项目都有特定的处理程序操作。因此,他需要遍历所有选择器,直到他得到一个匹配,然后调用相关的处理函数。 'target.closest(sel)'是他的测试......因为它必须在每次迭代中调用,直到匹配 - 然后当匹配突破循环。更改变量名称..虽然这wanish意味着工作代码...只是一个粗略的例子 – prodigitalson 2011-04-09 19:12:59