Mam <input type="number">
i chcę ograniczyć wprowadzanie użytkowników do liczb czysto lub liczb dziesiętnych do 2 miejsc po przecinku.
Zasadniczo proszę o podanie ceny.
Chciałem uniknąć wyrażenia regularnego. Czy jest na to sposób?
<input type="number" required name="price" min="0" value="0" step="any">
type="text"
tak wracają do , więc jakie to ma znaczenie?Odpowiedzi:
Zamiast
step="any"
, co pozwala na dowolną liczbę miejsc po przecinku, użyjstep=".01"
, który pozwala na maksymalnie dwa miejsca po przecinku.Więcej szczegółów w specyfikacji: https://www.w3.org/TR/html/sec-forms.html#the-step-attribute
źródło
500.12345
w żadnym z danych wejściowych, być może nasze rozumienie wymagań jest inne.:valid
i:invalid
są stosowane zgodnie z oczekiwaniami.Jeśli przypadek, ktoś szuka wyrażenia regularnego, który dopuszcza tylko liczby z opcjonalnymi 2 miejscami dziesiętnymi
Na przykład poniżej znalazłem rozwiązanie dość niezawodne
HTML:
JS / JQuery:
źródło
setTimeout()
trzeba poczekać na zakończeniekeydown
wydarzenia przed ustawieniemnewVal
(w przeciwnym razie będzie tak samo jakoldVal
). Jednak po przekroczeniu limitu czasu 0 jest to bezcelowe i nie działa, ponieważ obie wartości są często takie same (w przeglądarce Firefox). Jeśli na przykład zostanie ustawiona wartość 1, będzie działać poprawnie.W przypadku waluty sugerowałbym:
Zobacz http://jsfiddle.net/vx3axsk5/1/
Właściwości „krok”, „min” i „wzorzec” HTML5 będą sprawdzane podczas przesyłania formularza, a nie w trybie onblur. Nie potrzebujesz,
step
jeśli masz,pattern
i nie potrzebujesz,pattern
jeśli maszstep
. Możesz więc wrócić dostep="any"
mojego kodu, ponieważ wzorzec i tak go zweryfikuje.Jeśli chcesz zweryfikować onblur, uważam, że wskazanie wizualne jest również pomocne, np. Zabarwienie tła na czerwono. Jeśli przeglądarka użytkownika nie obsługuje
type="number"
, nastąpi powrót dotype="text"
. Jeśli przeglądarka użytkownika nie obsługuje sprawdzania poprawności wzorca HTML5, mój fragment kodu JavaScript nie uniemożliwia przesłania formularza, ale daje wizualną wskazówkę. Tak więc dla osób ze słabą obsługą HTML5 i osób próbujących włamać się do bazy danych z wyłączoną obsługą JavaScript lub fałszowaniem żądań HTTP, i tak musisz ponownie sprawdzić poprawność na serwerze. Punktem sprawdzania poprawności w interfejsie jest lepsze wrażenia użytkownika. Tak długo, jak większość użytkowników ma dobre wrażenia, dobrze jest polegać na funkcjach HTML5, pod warunkiem, że kod będzie nadal działał i można zweryfikować na zapleczu.źródło
pattern
nie działa dlainput type=number
:<input type="number"> elements do not support use of the pattern attribute for making entered values conform to a specific regex pattern. The rationale for this is that number inputs can't contain anything except numbers, and you can constrain the minimum and maximum number of valid digits using the min and max attributes, as explained above.
Krok 1: Podłącz swoje pole wprowadzania numeru HTML do zdarzenia onchange
lub w kodzie HTML
Krok 2: Napisz
setTwoDecimalPlace
metodęMożesz zmienić liczbę miejsc po przecinku, zmieniając wartość przekazywaną do
toFixed()
metody. Zobacz dokumenty MDN .źródło
Odkryłem, że użycie jQuery było moim najlepszym rozwiązaniem.
źródło
Spróbuj tego, ponieważ zezwala się na wprowadzanie tylko 2 miejsc po przecinku
Lub użyj jQuery zgodnie z sugestią @SamohtVII
źródło
Użyj tego kodu
Domyślnie wartość kroku dla elementów wejściowych HTML5 to step = „1”.
źródło
tylko napisz
lang = 'nb "pozwala ci pisać liczby dziesiętne przecinkiem lub kropką
źródło
Na wejściu:
Na skrypcie:
źródło