Czy istnieje szybki sposób na ustawienie wprowadzania tekstu HTML ( <input type=text />
) tak, aby zezwalał tylko na naciśnięcia klawiszy numerycznych (plus „.”)?
javascript
jquery
html
Julius A.
źródło
źródło
<input type="text" onkeypress='return event.charCode >= 48 && event.charCode <= 57'></input>
Odpowiedzi:
Uwaga: to jest zaktualizowana odpowiedź. Komentarze poniżej odnoszą się do starej wersji pomieszanej z kodami klawiszy.
JavaScript
Wypróbuj sam na JSFiddle .
Możesz filtrować wartości wejściowe tekstu
<input>
za pomocą następującejsetInputFilter
funkcji (obsługuje kopiowanie + wklejanie, przeciąganie + upuszczanie, skróty klawiaturowe, operacje w menu kontekstowym, klawisze niewypełniane, położenie karetki, różne układy klawiatury i wszystkie przeglądarki od wersji IE 9 ) :Możesz teraz użyć tej
setInputFilter
funkcji, aby zainstalować filtr wejściowy:Zobacz demo JSFiddle, aby uzyskać więcej przykładów filtrów wejściowych. Pamiętaj też, że nadal musisz przeprowadzić weryfikację po stronie serwera!
Maszynopis
Oto jego wersja TypeScript.
jQuery
Istnieje również wersja jQuery. Zobacz tę odpowiedź .
HTML 5
HTML 5 ma natywne rozwiązanie z
<input type="number">
(patrz specyfikacja ), ale zauważ, że obsługa przeglądarki jest różna:step
,min
imax
atrybuty.e
iE
pole. Zobacz także to pytanie .Wypróbuj sam na w3schools.com .
źródło
(e.keyCode == 65 && (e.ctrlKey === true || e.metaKey === true))
Użyj tego DOM
I ten skrypt
źródło
Długo i ciężko szukałem dobrej odpowiedzi na to pytanie i rozpaczliwie potrzebujemy
<input type="number"
, ale poza tym te 2 są najbardziej zwięzłymi sposobami, jakie mogłem wymyślić:Jeśli nie podoba Ci się postać nieakceptowana wyświetlana przez ułamek sekundy przed usunięciem, poniższa metoda jest moim rozwiązaniem. Zwróć uwagę na liczne dodatkowe warunki, aby uniknąć wyłączenia wszelkiego rodzaju nawigacji i skrótów klawiszowych. Jeśli ktoś wie, jak to uprościć, daj nam znać!
źródło
/[^\d+]/
i działa z przytrzymaniem/[^\d]+/
. Jednak dobre rozwiązanie. Również @ user235859.
. Powinieneś to zrobić/[^0-9.]/g
Oto prosty, który pozwala na dokładnie jedną dziesiętną, ale nie więcej:
źródło
I jeszcze jeden przykład, który działa dla mnie świetnie:
Dołącz także do zdarzenia naciśnięcia klawisza
I HTML:
Oto przykład jsFiddle
źródło
HTML5 ma
<input type=number>
, co brzmi dla Ciebie. Obecnie tylko Opera obsługuje go natywnie, ale istnieje projekt z implementacją JavaScript.źródło
type=number
jest to, że nie jest obsługiwany przez IE9type=number
zezwolenie nae
znak, ponieważ uważa się go zae+10
liczbę. Drugi problem polega na tym, że nie można ograniczyć maksymalnej liczby znaków na wejściu.Większość odpowiedzi tutaj ma słabość korzystania z kluczowych zdarzeń .
Wiele odpowiedzi ograniczyłoby twoją zdolność do wybierania tekstu za pomocą makr klawiatury, kopiowania i wklejania i bardziej niechcianych zachowań, inne wydają się zależeć od konkretnych wtyczek jQuery, które zabijają muchy za pomocą karabinów maszynowych.
To proste rozwiązanie wydaje mi się najlepsze dla wielu platform, niezależnie od mechanizmu wprowadzania (naciśnięcie klawisza, kopiowanie + wklejanie, kopiowanie + wklejanie w prawo, wklejanie, zamiana tekstu na mowę itp.). Wszystkie makra klawiatury wyboru tekstu nadal działałyby, a nawet ograniczałyby możliwość ustawiania wartości nieliczbowych za pomocą skryptu.
źródło
replace(/[^\d]+/g,'')
Zamień wszystkie cyfry na pusty ciąg. Modyfikator „i” (bez rozróżniania wielkości liter) nie jest potrzebny./[^\d,.]+/
Zdecydowałem się użyć kombinacji dwóch wymienionych tutaj odpowiedzi, tj
<input type="number" />
i
<input type="text" onkeypress="return isNumberKey(event);">
źródło
return !(charCode > 31 && (charCode < 48 || charCode > 57));
HTML5 obsługuje wyrażenia regularne, więc możesz użyć tego:
Ostrzeżenie: niektóre przeglądarki jeszcze tego nie obsługują.
źródło
<input type=number>
.+
oznacza atrybut wzorca?JavaScript
dodatkowo możesz dodać przecinek, kropkę i minus (, .-)
HTML
źródło
Tak prosty....
// W funkcji JavaScript (może używać HTML lub PHP).
W formularzu wpisz:
Z wejściem maks. (Powyższe pozwala na 12-cyfrowy numer)
źródło
var charCode = (evt.which) ? evt.which : evt.keyCode;
2 rozwiązania:
Użyj walidatora formularza (na przykład z wtyczką sprawdzania poprawności jQuery )
Wykonaj sprawdzenie podczas zdarzenia onblur (tj. Kiedy użytkownik opuści pole) zdarzenia pola wejściowego, używając wyrażenia regularnego:
źródło
var regExpr = /^\d+(\.\d*)?$/;
.123
(zamiast0.123
)?var regExpr = /^\d+(\.\d*)?$|^\.\d+$/;
.Bezpieczniejszym podejściem jest sprawdzanie wartości danych wejściowych zamiast przejmowania naciśnięć klawiszy i próby filtrowania kodów klawiszy.
W ten sposób użytkownik może swobodnie korzystać ze strzałek, klawiszy modyfikujących, cofania, usuwania, używania niestandardowych klawiszy, używania myszy do wklejania, przeciągania i upuszczania tekstu, a nawet wprowadzania danych dotyczących dostępności.
Poniższy skrypt dopuszcza liczby dodatnie i ujemne
EDYCJA: Usunąłem moją starą odpowiedź, ponieważ myślę, że jest już przestarzała.
źródło
Możesz użyć wzoru do tego:
Tutaj możesz zobaczyć pełne wskazówki dotyczące interfejsu witryny mobilnej .
źródło
Poniżej znajduje się wymienione rozwiązanie. W tym użytkownik może być w stanie wprowadzić tylko
numeric
wartość, użytkownik nie może również być w staniecopy
,paste
,drag
idrop
na wejściu.Daj mi znać, jeśli to nie zadziała.
źródło
Jeśli chcesz zasugerować urządzeniu (np. Telefonowi komórkowemu) wartość alfanumeryczną lub cyfrową, możesz użyć
<input type="number">
.źródło
Jeszcze jeden przykład, w którym można dodać tylko liczby w polu wprowadzania, nie można liter
źródło
Krótka i słodka implementacja wykorzystująca jQuery i replace () zamiast patrzeć na event.keyCode lub event.which:
Tylko niewielki efekt uboczny polega na tym, że wpisana litera pojawia się na chwilę, a CTRL / CMD + A wydaje się zachowywać nieco dziwnie.
źródło
input type="number"
jest atrybutem HTML5.W innym przypadku pomoże ci to:
źródło
var charCode = (evt.which) ? evt.which : evt.keyCode;
Kod JavaScript:
Kod HTML:
działa idealnie, ponieważ kod cofania to 8, a wyrażenie regularne nie pozwala na to, więc jest to łatwy sposób na obejście błędu :)
źródło
Łatwym sposobem rozwiązania tego problemu jest zaimplementowanie funkcji jQuery do sprawdzania poprawności znaków regularnych wpisywanych w polu tekstowym na przykład:
Twój kod HTML:
I funkcja js za pomocą jQuery
źródło
Tylko inny wariant z użyciem jQuery
źródło
wystarczy użyć type = "number", teraz ten atrybut obsługuje większość przeglądarek
źródło
--1
(2 minus znaki przed 1).Możesz także porównać wartość wejściową (która jest domyślnie traktowana jako ciąg) z samą siłą wymuszoną jako wartość liczbową, na przykład:
Musisz jednak powiązać to ze zdarzeniem, takim jak keyup itp.
źródło
źródło
Widziałem kilka świetnych odpowiedzi, jednak lubię je tak małe i tak proste, jak to możliwe, więc może ktoś z nich skorzysta. Chciałbym użyć javascript
Number()
iisNaN
funkcjonalności takich jak to:Mam nadzieję że to pomoże.
źródło
Użyj tego DOM:
I ten skrypt:
... LUB ten skrypt, bez indexOf, używając dwóch
for
...Użyłem atrybutu onkeydown zamiast onkeypress, ponieważ atrybut onkeydown jest sprawdzany przed atrybutem onkeypress. Problem dotyczyłby przeglądarki Google Chrome.
Z atrybutem „onkeypress” TAB byłby niekontrolowany za pomocą „preventDefault” w Google Chrome, jednak z atrybutem „onkeydown”, TAB można kontrolować!
Kod ASCII dla TAB => 9
Pierwszy skrypt ma mniej kodu niż drugi, jednak tablica znaków ASCII musi mieć wszystkie klucze.
Drugi skrypt jest znacznie większy niż pierwszy, ale tablica nie potrzebuje wszystkich kluczy. Pierwsza cyfra w każdej pozycji tablicy oznacza liczbę odczytów każdej pozycji. Dla każdego odczytu będzie zwiększany o 1 do następnego. Na przykład:
NCount = 0
48 + NCount = 48
NCount + +
48 + NCount = 49
NCount + +
...
48 + NCount = 57
W przypadku kluczy numerycznych jest tylko 10 (0 - 9), ale gdyby były 1 milion, nie ma sensu tworzyć tablicy z tymi wszystkimi kluczami.
Kody ASCII:
źródło
To ulepszona funkcja:
źródło
Najlepszy sposób (zezwalaj na WSZYSTKIE liczby - prawdziwy ujemny, prawdziwy dodatni, iinteger ujemny, całkowity dodatni) to:
źródło
To jest rozszerzona wersja rozwiązania geowa4 . Obsługuje
min
imax
atrybuty. Jeśli liczba jest poza zakresem, zostanie wyświetlona poprzednia wartość.Możesz to przetestować tutaj.
Stosowanie:
<input type=text class='number' maxlength=3 min=1 max=500>
Jeśli dane wejściowe są dynamiczne, użyj tego:
źródło