Wiem, że podobne pytania były już wcześniej zadawane, ale obserwowane przeze mnie zachowanie jest nieco inne niż to, co udało mi się znaleźć na stronie SO .preventDefault() po kliknięciu klawisza tabulatora wewnątrz obszaru tekstowego w Chrome
Mam formularz, który rozpadam na kilka kart akordeonowych jquery. Chcę, aby użytkownik mógł wypełnić pole tekstowe na karcie 1, a następnie nacisnąć klawisz Tab, aby automatycznie otworzyć zakładkę 2 i skoncentrować się na polu tekstowym na tej karcie. Problem, który mam, zapobiega domyślnemu zachowaniu klawiszy w Chrome.
$("form#new_story").keydown(function (e) {
if(!e) var e = window.event;
var keyCode = e.keyCode || e.which;
if (keyCode == 9) {
e.preventDefault();
alert("tab was keyed");
}
});
Testowałem to w Chrome, FF i Safari. Działa dobrze w FF i Safari, ale gdy użytkownik używający klawiszy Chrome w dół klawisza tab, do pola tekstowego wprowadzana jest aktualna zakładka przed wyzwalaniem zdarzenia. Chciałbym zatrzymać to zachowanie, ale zakładka jest wyraźnie wprowadzana zanim zdarzenie się uruchomi. Czy istnieje sposób, aby to zatrzymać?
Zakładka jest wprowadzana * przed * zdarzeniem "keydown"? Brzmi mało prawdopodobne. Ale aby temu zapobiec, możesz zahaczyć o "keypress" i stłumić to. – Bergi
'keypress' nie przechwycił naciśnięcia tabulatora (wiem, że' keypress' nie przechwytuje klawiszy nie zawierających znaków w starszych wersjach np. Nie wiedziałem, że nie przechwyciłoby to klawiszy niebędących znakami w Chrome. "Właśnie znalazłem problem. To bardzo zabawna interakcja pomiędzy akordeonem jQuery i jQueryfikującym." Przedstawi to jako odpowiedź poniżej. –