if(characterCode == 13)
{
return false; // returning false will prevent the event from bubbling up.
}
else
{
return true;
}
Ok, więc wyobraź sobie, że masz następujące pole tekstowe w formularzu:
<input id="scriptBox" type="text" onkeypress="return runScript(event)" />
Aby uruchomić skrypt „zdefiniowany przez użytkownika” z tego pola tekstowego po naciśnięciu klawisza Enter i nie wysyłać formularza, oto przykładowy kod. Pamiętaj, że ta funkcja nie sprawdza błędów i najprawdopodobniej będzie działać tylko w IE. Aby zrobić to dobrze, potrzebujesz bardziej niezawodnego rozwiązania, ale uzyskasz ogólny pomysł.
function runScript(e) {
//See notes about 'which' and 'key'
if (e.keyCode == 13) {
var tb = document.getElementById("scriptBox");
eval(tb.value);
return false;
}
}
zwrócenie wartości funkcji ostrzega moduł obsługi zdarzeń, aby nie powodował dalszego blokowania zdarzenia i uniemożliwi dalszą obsługę zdarzenia naciśnięcia klawisza.
UWAGA:
Podkreślono, że obecniekeyCode
jest przestarzałe . Następnego najlepszą alternatywą which
jest również przestarzała .
Niestety ulubiony standard key
, który jest powszechnie obsługiwany przez nowoczesne przeglądarki, ma pewne podejrzane zachowanie w IE i Edge . Wszystko starsze niż IE11 nadal wymagałoby wypełniania .
Co więcej, choć przestarzałe ostrzeżenie jest dość złowieszcze, keyCode
a which
usunięcie ich stanowiłoby ogromną przełomową zmianę w nieopowiedzianej liczbie starszych witryn. Z tego powodu jest mało prawdopodobne, że w najbliższym czasie pójdą gdziekolwiek.
eval
zawartość przez naciśnięcie przycisku nie różni się od tego, czy otworzyli narzędzia programistyczne i zrobili to. Gdyby to było coś, co zapisywało się w bazie danych i mogłoby być otwierane przez KOLEJNEGO użytkownika, to byłaby to wielka sprawa, ale jest to problem całkowicie niezależny od tego małego fragmentu kodu.keyCode
jest teraz przestarzałeUżyj obu
event.which
ievent.keyCode
:źródło
which
innekeyCode
. Dobrą praktyką jest uwzględnienie obu.keydown
zdarzenia zamiastkeyup
lubkeypress
Jeśli używasz jQuery:
źródło
preventDefault
wydaje się nie zatrzymywać przesyłania formularza, przynajmniej w Chrome.$('input[type=text]').on('keydown', function(e) { if (e.which == 13) { e.preventDefault(); } });
'keydown'
jest poprawny, jak twierdzą inni komentatorzy. Ponieważ nic się nie zmieniło, zaktualizuję odpowiedź. Użyłem tej odpowiedzi i utknąłem na chwilę, aż wróciłem i spojrzałem na komentarze.event.key === „Enter”
Nowsze i znacznie czystsze: użyj
event.key
. Nigdy więcej dowolnych kodów liczbowych!Dokumenty Mozilla
Obsługiwane przeglądarki
źródło
keyCode
jest przestarzałe. Jest to bardziej czytelne iNaciśnięcie klawisza Wykryj Enter na całym dokumencie:
http://jsfiddle.net/umerqureshi/dcjsa08n/3/
źródło
Zastąp
onsubmit
działanie formularza, które ma być wywołaniem funkcji i dodaj po nim return false, tj .:źródło
Reaguje rozwiązanie js
źródło
Być może najlepszym rozwiązaniem byłoby objęcie jak największej liczby przeglądarek i zabezpieczenie na przyszłość
źródło
jeśli chcesz to zrobić za pomocą czysto skryptu Java, oto przykład, który działa idealnie
Powiedzmy, że to Twój plik HTML
po prostu użyj tej funkcji w pliku popup.js
źródło
Poniższy kod doda detektor
ENTER
klucza na całej stronie.Może to być bardzo przydatne na ekranach z jednym przyciskiem akcji, np. Zaloguj się, zarejestruj się, prześlij itp.
Testowany na wszystkich przeglądarkach.
źródło
Rozwiązanie jQuery.
Przybyłem tutaj, aby znaleźć sposób na opóźnienie przesłania formularza, aż do momentu uruchomienia zdarzenia rozmycia przy wprowadzaniu tekstu.
Byłoby miło uzyskać bardziej ogólną wersję, która wyzwalała wszystkie opóźnione zdarzenia, a nie tylko przesłanie formularza.
źródło
Z mojej perspektywy znacznie prostszym i skuteczniejszym sposobem powinno być:
źródło
Używając TypeScript i unikaj wielokrotnych wywołań funkcji
źródło
Trochę proste
Nie wysyłaj formularza po naciśnięciu klawisza „Enter”:
Wykonaj funkcję po naciśnięciu klawisza „Enter”:
źródło
native js (pobierz api)
źródło
Dodaj ten kod na swojej stronie HTML ... spowoduje wyłączenie ... Enter Button ..
źródło
źródło
Rozwiązanie dla wielu przeglądarek
Niektóre starsze przeglądarki zaimplementowały zdarzenia keydown w niestandardowy sposób.
which
ikeyCode
są obecnie przestarzałe, ale mimo to sprawdzenie tych zdarzeń nie zaszkodzi, aby kod działał dla użytkowników, którzy nadal używają starszych przeglądarek, takich jak IE.Te
isKeyPressed
kontrole funkcyjne jeśli wciśnięty klawisz został wejść ievent.preventDefault()
utrudnia forma od złożenia.Minimalny przykład roboczy
JS
HTML
https://jsfiddle.net/tobiobeck/z13dh5r2/
źródło