2011-02-04 7 views
5

Używam Prototype i robię Event.observe na window.document.Problem z obserwacją prototypu w Operze

Łapię enter (keyCode 13) i alt + f (altKey & & keyCode = 70).

Mój kod działa super z firefox, IE i chrome. Z Operą nr. Enter jest catched, ale tylko wtedy, gdy moje fokusowanie nie odbywa się przy wprowadzaniu tekstu. Alt + F w ogóle nie działa.

Czy to błąd w prototypie, czy muszę zrobić coś ekstra w Operze, aby móc kontynuować? Jak powiedziałem, we wszystkich innych przeglądarce mój kod działa ....

Odpowiedz

2

Po pierwsze, po to pomocne źródło: http://unixpapa.com/js/key.html

Po drugie, należy wiedzieć, że istnieje różnica między keydown (lub keyup) i naciśnięciu klawisza . keypress zazwyczaj nie dopuszcza klawiszy modyfikujących, chociaż niektóre pozwalają w Operze na kontrolowanie. Lepiej używać keydown dla spójności między przeglądarkami.

uzyskać keyCode === 13 w Operze 11.10 bez względu na to, czy pole tekstowe jest wprowadzony czy nie i bez względu na to, czy za pomocą Prototype tak:

Event.observe(document, 'keydown', function (e) { 
    alert(e.charCode+'::'+e.keyCode); 
}); 

lub stosując metodę natywną bezpośrednio (za pomocą attachEvent dla IE):

if (document.addEventListener) { 
    document.addEventListener('keydown', function (e) { 
     alert(e.charCode+'::'+e.keyCode); 
    }, false); 
} 
else { // IE 
    document.attachEvent('onkeypress', function (e) { 
     alert(e.charCode+'::'+e.keyCode); 
    }); 
} 

Jednakże aLT jest rzeczywiście nie wykryto wewnątrz tekstowe, chyba że w połączeniu z funkcją lub klawisza sterującego (ale to nie działa w Chrome lub IE). Może to być spowodowane tym, że Windows używa alt, aby dać dostęp do paska menu aplikacji.

Można spróbować przy użyciu klawisza sterującego i używając preventDefault() (aby uniknąć domyślnych zachowań, takich jak Ctrl-F robi stronę Znajdź), choć może to drażnić użytkowników, którzy mogą nie chcieć ich zachowania przeglądarek wyłączone dla swojej strony.

0

Alt-F aktywuje menu, a Opera nie pozwala JavaScriptowi obsługiwać tego klawisza.