Korzystam z jQuery Tools Validator, który implementuje sprawdzanie poprawności HTML5 poprzez jQuery. Do tej pory działało świetnie, z wyjątkiem jednej rzeczy. W specyfikacji HTML5 typ wejściowy „liczba” może mieć zarówno liczby całkowite, jak i liczby zmiennoprzecinkowe. Wydaje się to niezwykle krótkowzroczne, ponieważ będzie to użyteczny walidator tylko wtedy, gdy twoje pola bazy danych są podpisane liczbami zmiennoprzecinkowymi (w przypadku niepodpisanych liczb wewnętrznych musisz wrócić do sprawdzania poprawności „wzorca”, a tym samym utracić dodatkowe funkcje, takie jak góra i dół strzałki dla przeglądarek, które go obsługują). Czy istnieje inny typ danych wejściowych, a może atrybut, który ograniczyłby dane wejściowe do liczb całkowitych bez znaku? Nie mogłem znaleźć, dzięki.
EDYTOWAĆ
Ok, doceniam wasz czas i pomoc, ale widzę wielu niezasłużonych głosowań: D. Ustawienie kroku na 1 nie jest odpowiedzią, ponieważ nie ogranicza wprowadzania danych. Nadal możesz wpisać ujemną liczbę zmiennoprzecinkową w polu tekstowym. Jestem również świadomy sprawdzania poprawności wzoru (wspomniałem o tym w moim oryginalnym poście), ale nie było to częścią pytania. Chciałem wiedzieć, czy HTML5 pozwala na ograniczenie wprowadzania typu „liczba” do dodatnich wartości całkowitych. Wydaje się, że na to pytanie odpowiedź brzmiałaby „nie, nie ma”. Nie chciałem używać sprawdzania poprawności wzorców, ponieważ powoduje to pewne wady podczas sprawdzania poprawności narzędzi jQuery, ale wydaje się, że specyfikacja nie pozwala na czystszy sposób na zrobienie tego.
źródło
number
wejściowe (przynajmniej w FF / Chrome / Safari) domyślnie akceptują tylko liczby całkowite, chyba że ustawisz jawną wartośćstep
atrybutu, która zezwala na wartości dziesiętne; npstep="0.01"
. : Udokumentowane MDN tutaj . W dwóch myślach o tym, ponieważ uważam, że jest to rozsądna wartość domyślna, ale także przełomowa zmiana (tak, wpłynęło to na kod, który napisałem).Odpowiedzi:
https://www.w3.org/wiki/HTML/Elements/input/number
Najlepsze, co możesz osiągnąć tylko za pomocą HTML
źródło
min
się1
jak chce liczby dodatnie (i numerów nie non-ujemne).<input type="number" min="0" step="1"/>
jest najbardziej poprawną odpowiedzią na pytanie. W każdym razie, po co mieć obastep="1"
ipattern="\d+"
? W obu przypadkach nie mogę wpisać liczb zmiennoprzecinkowych.Ustaw
step
atrybut na1
:W tej chwili wydaje się to nieco wadliwe, więc może nie być to obecnie najlepsze rozwiązanie.
Lepszym rozwiązaniem jest użycie
pattern
atrybutu, który używa wyrażenia regularnego do dopasowania danych wejściowych:\d
jest wyrażeniem regularnym dla liczby,*
oznacza, że akceptuje więcej niż jeden z nich. Oto demo: http://jsfiddle.net/b8NrE/1/źródło
number
zawierającym inne znaki, Chrome wyświetli komunikat o błędzie.submit
wyzwalanie postu./\d*/.test(1.1) // true
pattern="\d*"
to nie to samo co/\d*/
,pattern="\d*"
jest równe/^(?:\d*)$/
, zapoznaj się z dokumentacją atrybutu wzorca HTML5 .Za pomocą tego kodu dane wejściowe w polu tekstowym ograniczają wprowadzanie tylko cyfr. Wzorzec to nowy atrybut dostępny w HTML 5.
Atrybut wzorca doc
źródło
Prosty sposób przy użyciu JavaScript:
źródło
replace(/(\..*)\./g, '$1')
.
tylko raz, np.123.556
Można je zapisać.Wzorzec jest fajny, ale jeśli chcesz ograniczyć wprowadzanie tylko do liczb za pomocą type = "text", możesz użyć oninput i wyrażenia regularnego jak poniżej:
Warknę za mnie :)
źródło
Dotyczy to nie tylko HTML5, ale wszystkie przeglądarki działają poprawnie. Spróbuj tego
źródło
oninput
zamiast tegoWzór zawsze są korzystne dla ograniczenia, spróbuj
oninput
imin
występować 1 do wprowadzania tylko cyfry od 1 rokuźródło
próbowałeś ustawić
step
atrybut na 1 w ten sposób?źródło
Może nie pasuje do każdego przypadku użycia, ale
może zrobić dobrą robotę: skrzypce .
Sprawdź dokumentację .
źródło
Tak, HTML5 ma. Wypróbuj ten kod ( w3school ):
Widzisz minimalny i maksymalny paremeter? Próbowałem go przy użyciu Chrome 19 (działał) i Firefox 12 (nie działał).
źródło
Wystarczy umieścić go w polu wejściowym:
onkeypress='return event.charCode >= 48 && event.charCode <= 57'
źródło
Pracowałem, och, Chrome i miałem pewne problemy, mimo że używam atrybutów HTML. Skończyło się na tym kodzie js
źródło
Set
step="any"
. Działa w porządku. Odniesienie: http://blog.isotoma.com/2012/03/html5-input-typenumber-and-decimalsfloats-in-chrome/źródło
Z specyfikacji
Więc możesz po prostu ustawić na
1
:źródło
Ustaw
step
atrybut na dowolną liczbę zmiennoprzecinkową, np. 0,01, i możesz zacząć.źródło
źródło
Obecnie nie można uniemożliwić użytkownikowi zapisywania wartości dziesiętnych w danych wejściowych tylko za pomocą HTML. Musisz użyć javascript.
źródło
źródło
W Future ™ (patrz: Can I Use ) w aplikacjach klienckich, które przedstawiają Ci klawiaturę, możesz ograniczyć wprowadzanie tekstu tylko do liczb
input[inputmode]
.źródło
inputmode
jest przeznaczony głównie dla urządzeń przenośnych i wyzwala prawidłowy układ klawiatury, ale w przypadku „normalnych” komputerów z klawiaturami nie przeszkadza to w wprowadzaniu czegokolwiek.