2010-10-02 17 views
7

Estoy usando JavaScript y Prototype y capturo las teclas presionadas por el usuario. Cojo éxito de retorno, el espacio y las flechas con el código como el siguiente:Detener el desplazamiento de la página cuando se interceptan teclas, como el espacio y las flechas

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

Mi problema es que los espacios y flecha siguen desplazándose la página. ¿Hay alguna manera de evitar que se desplacen por la página?

+0

¿Cuál es la mejor manera de notificarte utilizando la notación "@"? @ J.Pablo o @JPablo? ¿Alguna idea de cuál funciona? – brainjam

+0

@brainjam Simplemente copie y pegue el nombre de usuario. Creo que en realidad, SO solo presta atención a la primera parte del nombre hasta el espacio, entonces @J. trabajaría. O, comentar la pregunta como lo hizo, es el truco. – JAL

+0

@Alex, creo que se necesitan al menos 3 caracteres. Ver http://meta.stackexchange.com/questions/43019/how-do-comment-replies-work/43020#43020 – brainjam

Respuesta

5

De the Prototype documentation:

Event.stop (evento)
Detiene la propagación del evento e impide su acción por defecto se dispare con el tiempo.

Por lo tanto, la adición de Event.stop(e); antes del break; debería resolver su problema.

Además, debe hacer esto para el evento keydown, porque keyup es demasiado tarde.

+0

Eso no funcionó ni en Firefor ni en Chrome. Tal vez me estoy perdiendo algo? – Pablo

+0

@ J.Pablo, me acabo de dar cuenta de que solo estás observando el evento keyup. Intente observar los eventos de pulsación de tecla y pulsación de tecla ... y usar Event.stop (e) allí. De lo contrario, probablemente estén llegando al navegador. – brainjam

+0

la pulsación de tecla no funcionó (no tuvo ningún efecto en absoluto, como si el evento no existiera), la tecla de función funcionó como esperaba. Gracias. – Pablo

6

Es demasiado tarde en keyup para evitar la acción predeterminada del navegador. Hacerlo en el caso keydown lugar y el uso Event.stop método del prototipo

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

Buena idea de que 'keyup' es demasiado tarde en el ciclo de vida del evento. –

7

Uso e.preventDefault() para detener el comportamiento por defecto del navegador

+2

No estoy seguro de que se aplique en este caso –

+1

Andrew Barber: lo hace. en la práctica, 'preventionDefault' es todo lo que necesita y, en teoría, parece ser la solución más correcta para este problema, ya que el desplazamiento del navegador es un comportamiento predeterminado. –

+0

Lo único que funcionó para mí (FF26). Lo usé en el evento keydown. – Zdenek

0

e.preventDefault() funciona en Chrome.

Cuestiones relacionadas