Jak zapobiegać ENTERprzesyłaniu formularza przez naciśnięcie klawisza w aplikacji internetowej?
javascript
events
użytkownik67722
źródło
źródło
Oto moduł obsługi jQuery, którego można użyć do zatrzymania wprowadzania wpisów, a także do zatrzymania klawisza Backspace -> wstecz. Pary (keyCode: selectorString) w obiekcie „keyStop” służą do dopasowania węzłów, które nie powinny uruchamiać domyślnej akcji.
Pamiętaj, że internet powinien być dostępnym miejscem, a to łamie oczekiwania użytkowników klawiatury. To powiedziawszy, w moim przypadku aplikacja internetowa, nad którą pracuję, i tak nie lubi przycisku Wstecz, więc wyłączenie skrótu klawiszowego jest OK. Dyskusja „powinien wejść -> prześlij” jest ważna, ale nie jest związana z faktycznie zadanym pytaniem.
Oto kod, który możesz pomyśleć o dostępności i dlaczego tak naprawdę chcesz to zrobić!
źródło
Po prostu zwróć false z modułu obsługi onsubmit
lub jeśli chcesz obsługiwać w środku
źródło
submit
przycisku<form>
od poddania się to wyrzucenie dziecka z kąpielą.źródło
e.preventDefault()
zamiastreturn false
osiągnąć ten sam cel, ale pozwolić zdarzeniu dotrzeć do procedur obsługi w elementach nadrzędnych. Domyślne działanie (zebranie formularza) będzie nadal uniemożliwioneBędziesz musiał wywołać tę funkcję, która po prostu anuluje domyślne zachowanie formularza podczas przesyłania. Możesz dołączyć go do dowolnego pola wejściowego lub zdarzenia.
źródło
Klawisz ENTER aktywuje jedynie domyślny przycisk przesyłania formularza, który będzie pierwszy
przeglądarka znajdzie w formularzu.
Dlatego nie mam przycisku wysyłania, ale coś podobnego
EDYTOWAĆ : W odpowiedzi na dyskusję w komentarzach:
Nie działa to, jeśli masz tylko jedno pole tekstowe - ale w takim przypadku może to być pożądane zachowanie.
Innym problemem jest to, że polega on na JavaScript do przesłania formularza. Może to stanowić problem z punktu widzenia dostępności. Można to rozwiązać, pisząc za
<input type='button'/>
pomocą javascript, a następnie wstawiając w<input type='submit' />
ciągu<noscript>
tagu. Wadą tego podejścia jest to, że w przeglądarkach z wyłączoną obsługą javascript będziesz mieć przesyłane formularze na ENTER. Od OP zależy, jakie zachowanie będzie pożądane w tym przypadku.Nie znam żadnego sposobu, aby to zrobić bez inwokowania javascript.
źródło
Krótko mówiąc w czystym JavaScript jest:
Wyłącza to tylko naciśnięcie klawisza „Enter” dla typu wprowadzania = „tekst”. Użytkownicy mogą nadal korzystać z klawisza „Enter” w całej witrynie.
Zobacz moją szczegółową odpowiedź na podobne pytanie tutaj
źródło
e.target.nodeName === 'INPUT' && e.target.type !== 'textarea'
. Podany kod pozwoli na przesyłanie formularzy, jeśli radio lub pole wyboru są skoncentrowane.Wszystkie odpowiedzi, które znalazłem na ten temat, tutaj lub w innych postach, mają jedną wadę, to znaczy, że zapobiegają również faktycznemu wyzwalaniu zmian w elemencie formularza. Więc jeśli uruchomisz te rozwiązania, zdarzenie onchange również nie zostanie wyzwolone. Aby rozwiązać ten problem, zmodyfikowałem te kody i opracowałem dla siebie następujący kod. Mam nadzieję, że stanie się to przydatne dla innych. Dałem klasę do mojego formularza „prevent_auto_submit” i dodałem następujący JavaScript:
źródło
W przeszłości zawsze robiłem to z obsługą klawiszy, jak wyżej, ale dziś wpadłem na prostsze rozwiązanie. Klawisz Enter uruchamia tylko pierwszy nie wyłączony przycisk przesyłania w formularzu, więc właściwie wszystko, co jest wymagane, to przechwycenie tego przycisku podczas próby przesłania:
Otóż to. Naciskanie klawiszy będzie obsługiwane jak zwykle przez przeglądarkę / pola / itp. Jeśli zostanie uruchomiona logika Enter-Submit, przeglądarka znajdzie ukryty przycisk Wyślij i uruchomi go. Program obsługi javascript zapobiegnie następnie przesłaniu.
źródło
hidden
na wejściu byłoby krótsze. niezły hack :)Spędziłem trochę czasu, tworząc tę przeglądarkę dla IE8,9,10, Opera 9+, Firefox 23, Safari (PC) i Safari (MAC)
Przykład JSFiddle: http://jsfiddle.net/greatbigmassive/ZyeHe/
Kod podstawowy - wywołaj tę funkcję poprzez „onkeypress” dołączony do formularza i przekaż do niego „window.event”.
źródło
Następnie w formularzu:
Jednak byłoby lepiej, gdybyś nie używał natrętnego JavaScript.
źródło
charCode
. Przesunąłem równieżreturn false
wnętrze bloku if. Dobry chwytW moim przypadku ten jQuery JavaScript rozwiązał problem
źródło
<input>
pól w formularzu?Zapobieganie przesłaniu formularza przez „ENTER” może powodować niedogodności dla niektórych użytkowników. Byłoby lepiej, jeśli wykonasz poniższą procedurę:
Napisz zdarzenie „onSubmit” w tagu formularza:
napisz funkcję JavaScript w następujący sposób:
Niezależnie od przyczyny, jeśli chcesz uniemożliwić przesłanie formularza po naciśnięciu klawisza Enter, możesz napisać następującą funkcję w javascript:
dzięki.
źródło
Dodaj ten tag do formularza -
onsubmit="return false;"
wtedy możesz przesłać formularz tylko za pomocą funkcji JavaScript.źródło
Aby zapobiec przesyłania formularza po naciśnięciu enterw sposób
textarea
lubinput
zakresie, sprawdzić przedstawić zdarzenie, aby znaleźć to rodzaj elementu wysłał zdarzenie.Przykład 1
HTML
jQuery
Lepszym rozwiązaniem jest, jeśli nie masz przycisku wysyłania i odpalasz wydarzenie zwykłym przyciskiem. Jest lepiej, ponieważ w pierwszym przykładzie uruchamiane są 2 zdarzenia wysyłania, ale w drugim przykładzie uruchamiane jest tylko 1 zdarzenie wysyłania.
Przykład 2
HTML
jQuery
źródło
Przekonasz się, że jest to prostsze i przydatne: D
źródło
Co powiesz na:
źródło
Sprawdź ten artykuł Jak zapobiec naciśnięciu klawisza ENTER w celu przesłania formularza internetowego?
źródło
Myślę, że możesz uwięzić keydown na formularzu w javascript i zapobiec nawet bulgotaniu. ENTER na stronie internetowej po prostu przesyła formularz, w którym znajduje się obecnie wybrany element sterujący.
źródło
Ten link zapewnia rozwiązanie, które działało dla mnie w Chrome, FF i IE9 oraz emulator dla IE7 i 8, który jest dostarczany z narzędziem programistycznym IE9 (F12).
http://webcheatsheet.com/javascript/disable_enter_key.php
źródło
<script type="text/javascript"> function stopRKey(evt) { var evt = (evt) ? evt : ((event) ? event : null); var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null); if ((evt.keyCode == 13) && (node.type=="text")) {return false;} } document.onkeypress = stopRKey; </script>
Innym podejściem jest dodanie przycisku wprowadzania danych do formularza tylko wtedy, gdy ma zostać przesłany, i zastąpienie go zwykłym div podczas wypełniania formularza
źródło
Po prostu dodaj ten atrybut do tagu FORM:
Następnie w tagu SCRIPT dodaj to:
Następnie, kiedy tworzysz przycisk lub z innego powodu (np. W funkcji), w końcu zezwalasz na przesłanie, po prostu odwróć globalną wartość logiczną i wykonaj wywołanie .submit (), podobnie jak w tym przykładzie:
źródło
Natknąłem się na to sam, ponieważ mam wiele przycisków przesyłania z różnymi wartościami „nazwa”, więc po przesłaniu robią różne rzeczy na tym samym pliku php. Przycisk
enter
/return
psuje to, ponieważ te wartości nie zostały przesłane. Zastanawiałem się więc, czy przyciskenter
/return
aktywuje pierwszy przycisk przesyłania w formularzu? W ten sposób możesz mieć przycisk przesyłania „waniliowy”, który jest albo ukryty, albo ma wartość „nazwa”, która zwraca wykonywany plik php z powrotem na stronę z formularzem. Albo też domyślna (ukryta) wartość „nazwa”, którą aktywuje naciśnięcie klawisza, a przyciski wysyłania zastępują własne wartości „nazwa”. Tylko myśl.źródło
Co powiesz na:
I po prostu nazwij swój przycisk w prawo, a on nadal będzie się przesyłać, ale pola tekstowe, tj. WyraźnyOriginalTarget po wciśnięciu return w jednym, nie będą miały właściwej nazwy.
źródło
To zadziałało dla mnie.
onkeydown = "return! (event.keyCode == 13)"
źródło
Oto jak bym to zrobił:
źródło
umieścić w zewnętrznym pliku javascript
lub gdzieś wewnątrz tagu ciała
źródło
Miałem ten sam problem (formularze z mnóstwem pól tekstowych i niewykwalifikowani użytkownicy).
Rozwiązałem to w ten sposób:
używając tego w kodzie HTML:
W ten sposób
ENTER
klucz działa zgodnie z planem, ale z potwierdzeniem (sekundaENTER
wymagane jest zwykle kliknięcie).Pozostawiam czytelnikom poszukiwanie skryptu wysyłającego użytkownika w pole, w którym nacisnął,
ENTER
jeśli zdecyduje się pozostać na formularzu.źródło