2011-06-07 12 views
7

Supongamos que tengo una función que debe ejecutarse en $(document).mousemove(). Luego decido que tengo otra función que necesita ejecutar en el mismo evento. Quizás estas dos funciones no están relacionadas, por lo que en nombre de la modularidad, uno podría tener dos funciones separadas para $(document).mousemove().El mismo evento jQuery, función separada

¿Es esta mala forma? ¿Hay implicaciones de rendimiento?

Respuesta

2

jQuery añadirá automáticamente a una cadena de eventos, así que no hay problema de tener las definiciones de controlador de duplicados para el mismo evento. Si puede combinar dos definiciones de manejador en una razonablemente, entonces ciertamente no hay nada de malo en ese enfoque, pero hay poco valor explícito para hacerlo que no sea, tal vez, la legibilidad.

0

¿No puede simplemente hacer esto? A menos que yo estoy mal entendido su pregunta

$(document).mousemove(function(){ 
    callOneFunction(); 
    callTwoFunction(); 
}); 
+0

hecho que podría hacer eso, que era mi pregunta ... :) –

+1

Como señala Nathan Taylor en su respuesta, jQuery añadirá los eventos en una cadena. Prefiero este método ya que está claro qué funciones se están llamando y en qué orden. Especialmente si otros leerán tu código (trabajo en proyectos de equipo, por lo que tener controladores de eventos para el mismo evento enloquece a la gente) :) –

+0

Sí, esto es definitivamente cierto. Gracias por la respuesta. Debería comenzar a escribir funciones que se llaman desde dentro del evento, en lugar de tener el código directamente en el evento. –

0

Por supuesto, si decide establecer 1000 funciones de escucha un evento que diría algo malo en su diseño, pero para mí dos funcs son simplemente bien

Me gustaría ir con los manipuladores de espacios de nombres con el fin de mantener la capacidad de mantenimiento, por lo menos si San Juan diseñó en jQuery que vale la pena utilizar en algunos casos de manera que hacer esto:

$(elem).bind('mousemove.ns1', funcOne); 
$(elem).bind('mousemove.ns2', funcTwo); 

esta manera usted es uno capaz de desvinculación por uno, así

$(elem).unbind('mousemove.ns1'); 
$(elem).unbind('mousemove.ns2'); 

O incluso

$(elem).unbind('.ns1'); 
Cuestiones relacionadas