我使用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