2010-02-09 8 views
8

Abbiamo codice che verrà eseguito se l'utente è inattivo per un certo periodo di tempo. (doStuff resetta un conto alla rovescia)Questa porta di Prototype in JQuery è corretta?

codice esistente nel 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(); }); 

sto cercando di sostituirlo con questo JQuery:

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

controlla fuori quando provo, ma può qualcuno conferma che non devo fare il controllo del documento/della finestra, o che non ho trascurato altro? Grazie.

+0

Per quanto riguarda la risposta, non lo so, ma se riesci a impilare tutti i binding con un comando 'bind' ... è davvero fantastico:] –

+0

Sì, sembra che funzioni correttamente, il che mi rende felice. – blu

+0

Ho notato che la messa a fuoco e la sfocatura non chiamano la funzione quando registro il modulo, non sono sicuro che abbia funzionato alla vecchia maniera ... – blu

risposta

15

Close, questo è un porto completo (aggiunto window) e il test pronti documento non è necessario:

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

È possibile passare un array alla funzione jQuery così che cosa si imposta si applica a più di un oggetto. In questo caso, hai già riferimenti a window e document. Ecco come puoi farlo in una sola chiamata.

Tuttavia, non penso che fosse necessario tutto il codice Prototype originale. Ad esempio, focus e blur non si applicano a document e click, mousemove e keypress non sono necessari su window.

Questo potrebbe essere più ciò che vuoi:

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

DOM pronto non necessaria: Il test pronto DOM non è necessaria, perché avete già subito l'accesso a document e window. Aspettare DOM ready è inutile.

+0

ok, grazie. – blu

+0

@blu ha appena aggiornato la mia risposta con qualche dettaglio in più. E ho capito che '$ (document) .ready' non era necessario. –

+0

Grazie per il seguito. Funziona, mi piace, domanda chiusa. – blu

1

Quel codice di Prototipo è ... non ottimale per non dire altro, e non per alcun motivo collegato a Prototipo.

La tua riscrittura sembra a parte altro che hai perso window. Se non si agganciano gli eventi su window è valido in jQuery, è valido in Prototipo.

una riscrittura simile in Prototype fare ipotesi simili (ma compreso window):

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

... e non sarei sorpreso di scoprire che anche questo è più dettagliato di quanto in realtà bisogno di essere.

Problemi correlati