Con la delegación de eventos en jQuery 1.6, puede responder a eventos que han borboteado a un elemento primario común.ámbito de variable de delegación de eventos de jquery con llamadas consecutivas
Un ejemplo de implementación es la siguiente:
(function($){
$.fn.myeventhandler = function() {
return this.delegate('a.next, a.prev', 'click customEvent', function (event) {
var target=$(event.target);
var bar = null;
if('click' == event.type) { /*~[ call this 'a' ]~*/
// handle the click event
$('#next-element').animate({width:'200px'},1300,function(){
bar = 'value1';
$('#next-element').animate({width:'100px'},1300,function(){
bar = 'value2';
console.log(bar);
});
});
} else if('customEvent' == event.type) { /*~[ call this 'b' ]~*/
// handle the customEvent event
$('#my-element').animate({height:'200px'},1300,function(){
bar = 'my-event1';
console.log(bar);
});
}
return false;
});
}
})(jQuery);
Este tipo de estructura puede funcionar muy bien cuando se tiene muchos activadores de eventos que desea que se atado en una página. Sin embargo, noté un comportamiento curioso y me pregunté si alguien me podría aclarar el alcance de lo siguiente:
Si define una variable 'var bar;
' antes 'a' y la usa en 'a' y 'a' toma mucho tiempo para ejecutarse, luego si se 'dispara' por segunda vez, ¿la variable 'barra' sería reasignada al valor o se crearía una nueva?
El motivo de la pregunta es que tengo una animación "inacabada" en la que la animación tarda 1,3 segundos en completarse. Si activa dos eventos de clic consecutivos, el objetivo y el tipo están configurados correctamente, pero la segunda animación parece estar afectando a la primera y parece que los dos ámbitos están disponibles el uno para el otro.
Todavía no he terminado la animación, así que no tengo un conjunto de trabajo para poner en línea en jsFiddle, pero ¿hay alguna regla de oro aquí que deba investigar o una explicación más clara del alcance disponible? alguien puede haber encontrado?
EDIT: En lo anterior, he añadido en una situación similar a lo que estoy usando. En el caso simplificado anterior, el valor de 'bar' todavía tiene el valor esperado en 2 llamadas consecutivas, pero en el caso más complicado estoy trabajando (todavía), a menos que pase los parámetros en la función de devolución de llamada específicamente, todavía hay una condición que permite 2 llamadas consecutivas para cambiar el valor del parámetro de modo que la devolución de llamada vea un valor creado por una llamada posterior, no el valor que se estableció lógicamente en su propia llamada activada. Si alguien puede replicar este efecto en un ejemplo simplificado, lo agradecería. Estoy reduciendo mis funciones para intentar producir un jsFiddle que lo replique.
Gracias, AE
¿Qué es 'a'? ? ? –
Hola, Código interestelar, 'a' en los comentarios se refiere al primer bloque de código if() y 'b' al bloque de código 'else'. Lo siento si los comentarios no fueron útiles. ¿Qué es un buen ejemplo para ilustrarlo mejor? ? – MyStream