Estoy vinculando un evento de un solo clic a un contenedor grande usando jquery (delegación de eventos).JavaScript Event Delegation code organization
Tengo muchos elementos diferentes dentro de ese contenedor en los que se puede hacer clic.
El problema que me preocupa es que si tengo 20 elementos que se pueden hacer clic, necesito hacer un bloque if else x 20 en el contenedor en el controlador de clic. ¿Hay alguna manera de hacer esto más limpio? Por ejemplo:
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
}
}
etc.
Esto es lo que estaba pensando también, gracias. – Abadaba
Su uso del objetivo implica que está ejecutando este bucle dentro del controlador de clic. Esto no es bueno porque tendrá que ejecutar $ (target) .closest() potencialmente más de 20 veces para encontrar la propiedad correspondiente. También está utilizando la palabra clave 'class', que se eliminará en webkit. – typeof
@typeof: se está ejecutando dentro del controlador de clics ... él está delegando en el elemento primario que contiene un conjunto de 20 elementos que tienen cada uno acciones específicas del controlador. Por lo tanto, necesita pasar por todos los selectores hasta que obtenga una coincidencia e invocar la función del controlador asociado. 'target.closest (sel)' es su prueba ... allí debe invocarse en cada iteración hasta que coincida, luego cuando se rompe el partido. Cambié el nombre de la variable ... aunque este deseo era código de trabajo ... solo un ejemplo aproximado – prodigitalson