2010-10-02 7 views
7

Sto usando JavaScript e Prototype e sto prendendo le pressioni dei tasti da parte dell'utente. Mi cattura con successo il ritorno, lo spazio e le frecce con il codice come questo:Arresta la pagina dallo scorrimento quando si intercetta il tasto preme come lo spazio e le frecce

Event.observe(window, "keyup", function(e) { 
    switch (e.keyCode) { 
    case Event.KEY_RETURN: 
    case Event.KEY_RIGHT: 
    case 32: // space 
     // do something 
     break; 
    } 
}); 

Il mio problema è che gli spazi e la freccia continuano a scorrere la pagina. C'è un modo per impedirgli di scorrere la pagina?

+0

Qual è il modo migliore per avvisarti usando la notazione "@"? @ J.Pablo o @JPablo? Qualche idea di quale funziona? – brainjam

+0

@brainjam Basta copiare e incollare il nome utente. Penso che in realtà, SO presta solo attenzione alla prima parte del nome fino allo spazio, quindi @J. funzionerebbe. Oppure, commentando la domanda come hai fatto, il trucco. – JAL

+0

@Alex, penso che siano necessari almeno 3 caratteri. Vedi http://meta.stackexchange.com/questions/43019/how-do-comment-replies-work/43020#43020 – brainjam

risposta

5

Da the Prototype documentation:

event.stop (evento)
Arresta propagazione della manifestazione e previene la sua azione predefinita venga azionata alla fine.

Quindi aggiungere Event.stop(e); prima del break; dovrebbe risolvere il problema.

Inoltre, si dovrebbe fare questo per l'evento keydown, perché keyup è troppo tardi.

+0

Questo non ha funzionato né in Firefor né in Chrome. Forse mi manca qualcosa? – Pablo

+0

@ J.Pablo, ho appena realizzato che stai solo osservando l'evento keyup. Prova ad osservare gli eventi keydown e keypress ... e utilizza l'Event.stop (e) lì. Altrimenti, probabilmente stanno arrivando al browser. – brainjam

+0

keypress non ha funzionato (non ha avuto alcun effetto, come se l'evento non esistesse), keydown ha funzionato come mi aspettavo. Grazie. – Pablo

6

È troppo tardi in keyup per impedire l'azione predefinita del browser. Farlo in caso keydown invece e utilizzare il metodo di Event.stop Prototype:

Event.observe(document, "keydown", function(e) { 
    switch (e.keyCode) { 
    case Event.KEY_RETURN: 
    case Event.KEY_RIGHT: 
    case 32: // space 
     // do something 
     Event.stop(e); 
     break; 
    } 
}); 
+1

Buona visione del fatto che 'keyup' è troppo tardi nel ciclo di vita dell'evento. –

7

Usa e.preventDefault() per fermare il comportamento predefinito di navigatore

+2

Non sono sicuro che si applica in questo caso –

+1

Andrew Barber: lo fa. in pratica 'preventDefault' è tutto ciò che serve e in teoria sembra essere la soluzione più corretta a questo problema, poiché lo scorrimento del browser è un comportamento predefinito. –

+0

L'unica cosa che ha funzionato per me (FF26). L'ho usato nell'evento keydown. – Zdenek

0

e.preventDefault() funziona in Chrome.

Problemi correlati