2010-10-02 11 views
7

Używam JavaScript i Prototypu oraz przechwytywanie naciśnięć klawiszy od użytkownika. Udało mi się złapać powrotny, przestrzeń i strzały z kodem tak:Zatrzymaj przewijanie strony podczas przechwytywania naciśnięć klawiszy, takich jak spacja i strzałki

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

Moim problemem jest to, że przestrzenie i strzałki przechowywać na przewijanie strony. Czy istnieje sposób, aby uniemożliwić im przewijanie strony?

+0

Jaki jest najlepszy sposób powiadomienia użytkownika za pomocą notacji "@"? @ J.Pablo lub @JPablo? Jakieś pomysły na to, co działa? – brainjam

+0

@brainjam Wystarczy skopiować i wkleić nazwę użytkownika. Myślę, że tak naprawdę, SO zwraca uwagę tylko na pierwszą część nazwiska aż do miejsca, więc @J. pracowałbym. Lub, komentując pytanie tak, jak Ty to robisz. – JAL

+0

@Alex, myślę, że potrzebne są co najmniej 3 znaki. Zobacz http://meta.stackexchange.com/questions/43019/how-do-comment-replies-work/43020#43020 – brainjam

Odpowiedz

5

Od the Prototype documentation:

Event.stop (event)
Zatrzymuje rozprzestrzenianie zdarzenia i zapobiega jego domyślną akcję przed wyzwalane ostatecznie.

Dodanie Event.stop(e); przed break; powinno rozwiązać Twój problem.

Powinieneś także zrobić to dla zdarzenia keydown, ponieważ keyup jest za późno.

+0

To nie działało ani w Firefor, ani w Chrome. Może coś mi brakuje? – Pablo

+0

@ J.Pablo, Właśnie zdałem sobie sprawę, że obserwujesz tylko zdarzenie keyup. Spróbuj obserwować zdarzenia keydown i keypress .. i użyj Event.stop (e) tam. W przeciwnym razie prawdopodobnie przechodzą do przeglądarki. – brainjam

+0

naciśnięcie klawisza nie działało (nie miało żadnego efektu, np. Jeśli zdarzenie nie istnieje), keydown działało zgodnie z oczekiwaniami. Dzięki. – Pablo

6

Jest zbyt późno w keyup, aby zapobiec domyślnej akcji przeglądarki. Czy to w przypadku keydown i używać zamiast prototyp za Event.stop metody:

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

Dobry wgląd, że 'keyup' jest za późno w cyklu życia zdarzenia. –

7

Zastosowanie e.preventDefault() przestałem domyślne zachowanie przeglądarki

+2

Nie wiem, czy ma to zastosowanie w tym przypadku. –

+1

Andrew Barber: tak. w praktyce 'preventDefault' to wszystko czego potrzebujesz i teoretycznie wydaje się być najbardziej poprawnym rozwiązaniem tego problemu, ponieważ przewijanie w przeglądarce jest domyślnym zachowaniem. –

+0

Jedyne, co zadziałało dla mnie (FF26). Użyłem go w wydarzeniu kluczowym. – Zdenek

0

e.preventDefault() działa w Chrome.

Powiązane problemy