2010-02-09 8 views
8

Tenemos un código que se ejecutará si el usuario está inactivo durante un cierto período de tiempo. (hacerTarea restablece una cuenta atrás)¿Es correcto este puerto de prototipo para JQuery?

código existente en Prototipo:

Event.observe(window, 'mousemove', function() { doStuff(); }); 
Event.observe(window, 'scroll', function() { doStuff(); }); 
Event.observe(window, 'click', function() { doStuff(); }); 
Event.observe(window, 'focus', function() { doStuff(); }); 
Event.observe(window, 'blur', function() { doStuff(); }); 
Event.observe(window, 'keypress', function() { doStuff(); }); 

Event.observe(document, 'mousemove', function() { doStuff(); }); 
Event.observe(document, 'scroll', function() { doStuff(); }); 
Event.observe(document, 'click', function() { doStuff(); }); 
Event.observe(document, 'focus', function() { doStuff(); }); 
Event.observe(document, 'blur', function() { doStuff(); }); 
Event.observe(document, 'keypress', function() { doStuff(); }); 

Busco para reemplazarlo con este jQuery:

$(document).ready(function() { 
    $(document).bind("mousemove scroll click focus blur keypress", doStuff); 
}); 

comprueba hacia fuera cuando lo prueba, pero puede ¿Alguien confirma que no tengo que hacer el control de documento/ventana, o que no pasé por alto algo más? Gracias.

+0

En cuanto a la respuesta, no sé, pero si puedes apilar todos los enlaces a un comando 'bind' ... es bastante impresionante:] –

+0

Sí, parece que funciona correctamente, lo que me hace feliz. – blu

+0

Observé que el foco y el desenfoque no llaman a la función cuando desplazo la pestaña alrededor del formulario, no estoy seguro de si eso funcionó a la manera antigua ... – blu

Respuesta

15

Cerrar, se trata de un puerto completa (añadido window) y no es necesaria la prueba lista de documentos:

$([document, window]).bind("mousemove scroll click focus blur keypress", doStuff); 

Puede pasar una matriz a la función jQuery así que lo que se configura aplica a más de un item. En este caso, ya tiene referencias a window y document. Así es como puedes hacerlo en una llamada.

Sin embargo, no creo que se necesite todo el código Prototipo original. Por ejemplo, focus y blur no se aplican al document y click, mousemove y keypress no es necesario en el window.

Esto podría ser más lo que quiere:

$(window).bind("focus blur scroll", doStuff); 
$(document).bind("click mousemove keypress scroll", doStuff); 

Listo para DOM no necesita: La prueba lista DOM no es necesaria porque ya tiene acceso a document y window inmediatamente. Esperar a DOM listo es innecesario.

+0

bien, gracias. – blu

+0

@blu acaba de actualizar mi respuesta con un poco más de detalle. Y me di cuenta de que '$ (document) .ready' no era necesario. –

+0

Gracias por el seguimiento. Funciona, me gusta, pregunta cerrada. – blu

1

Ese código Prototype es ... no óptimo por decir lo menos, y no por ninguna razón relacionada con Prototype.

Su reescritura se ve bien, salvo que haya perdido window. Si no se conectan los eventos en window es válido en jQuery, es válido en Prototype.

Una reescritura similar en Prototipo hacer suposiciones similares (pero incluyendo window):

$w('mousemove scroll click focus blur keypress').each(function(evtname) { 
    document.observe(evtname, doStuff); 
    Event.observe(window, evtname, doStuff); 
}); 

... y yo no estaría sorprendido de encontrar que incluso eso es más detallado de lo que realmente tiene que ser.

Cuestiones relacionadas