2011-10-17 6 views
11

Przechwytywam kluczową wartość "191" dla ukośnika (/) dla funkcji w mojej witrynie. Działa dobrze na każdej przeglądarce z wyjątkiem przeglądarki Firefox ze względu na funkcję szybkiego wyszukiwania. Rejestr "191" nadal się rejestruje, a akcja jest wykonywana (nacisk na pole wejściowe, tekst pomocy podręcznej), ale fokus przechodzi do szybkiego wyszukiwania.Jak pominąć funkcję szybkiego wyszukiwania Funkcja Firefox i przechwytywać naciśnięcie klawisza z wyprzedzeniem ukośnika

Przeczytałem w innym pytaniu StackOverflow, że Firefox przechwytuje ukośnik jako kod znaku "0", ale to nic nie dało.

Czy istnieje sposób, w jaki mogę zignorować szybkie wyszukiwanie w Firefoksie i uzyskać kontrolę nad wstecznym ukośnikiem? Korzystanie z JavaScript i jQuery.

+2

Najpierw zapytaj, czy ** powinieneś to zrobić. Zasadniczo zastanawiałbym się dwa razy (lub więcej) przed zrobieniem czegokolwiek, co zmienia oczekiwane zachowanie przeglądarki bez wiedzy i zgody użytkownika. Takie działanie będzie służyć głównie do frustracji i alienacji tych użytkowników. (Oczywiście, mówię to nie wiedząc nic o twojej aplikacji, być może masz dobry powód, by chcieć tego zachowania.) – eaj

+0

Twój najlepszy zakład będzie wybierał inny klawisz skrótu. Nawet jeśli rozwiążesz ten problem już dziś, nic nie wskazuje na to, że nowa aktualizacja do Firefoksa nie wystarczy, by ponownie go złamać. Najlepiej, aby uniknąć konfliktu w ogóle. –

+0

Jest jeszcze jeden przypadek, w którym może to być konieczne: jeśli użytkownik ma włączoną opcję "Wyszukaj tekst, gdy zaczynam pisać", pasek wyszukiwania pojawi się prawie * każdy * klawisz naciśnięty poza polem tekstowym. – Herohtar

Odpowiedz

9

Zgadzam się, że ważne jest, aby zapytać, czy powinieneś używać tego skrótu. Jeśli jednak zdecydujesz się (podobnie jak inne osoby - to także skrót wyszukiwania w Gmailu), wystarczy uchwycić zdarzenie keydown dokumentu (nie naciskając klawisza lub klawisza), a następnie zapobiec domyślnej akcji, która będzie przechwytywać w czasie, aby zatrzymać domyślne zachowanie firefox. Upewnij się również, że użytkownik nie wpisuje już pola tekstowego. Oto krótki przykład:

$(document).keydown(function(e) { 
    var _target = $(e.target); 
    var _focused = $(document.activeElement); 
    var _inputting = _focused.get(0).tagName.toLowerCase()==="textarea" || _focused.get(0).tagName.toLowerCase()==="input"; 

    ///(forward slash) key = search 
    if (!_inputting && e.keyCode===191) { 
     e.preventDefault(); 
     $("#search-input").focus(); 
     return; 
    } 
}); 
+1

'e.preventDefault()' wewnątrz zdarzenia 'keydown' działa również, gdy użytkownik ma w przeglądarce Firefox opcję" Wyszukaj tekst, gdy zaczynam pisać ". – Herohtar

Powiązane problemy