Autor Zpráva
pajadvorak
Profil
Mám tento kód:
onkeyup="if (/\D/g.test(this.value)) this.value = this.value.replace(/\D/g,'')"

Potřebuji do něj vložit "něco", aby bylo možné zadat desetinné číslo a to jak čárkou, tak i tečkou. Takže možné je zadat pouze čísla a po prvním čísle kdekoliv jednu čárku nebo jednu tečku. Ne více teček či čárek, ani kombinaci tečka a čárka zároveň. Jen čísla a buď 1x tečka nebo 1x čárka.

Prosím o pomoc. Děkuji.
Keeehi
Profil
Ideální řešení je <input type="number">. Navíc na mobilu to zobrazí i hezkou klávesnici.
Kajman
Profil
Keeehi:
To pak ale nepůjde zadávat libovolně desetinnou tečku i čárku. Tuším, že na některých mobilech (novější verze iOS) ani desetinný oddělovač není.
Keeehi
Profil
Kajman:
To pak ale nepůjde zadávat libovolně desetinnou tečku i čárku.
Já myslím, že snad fungují obě možnosti. Ale v jednu chvíli vždy jedna. Záleží to snad na nastavení jazyka.
Myslím, že by to ale nemělo ničemu vadit. Každý uživatel by měl být schopný to zadat tak, jak to běžně na svém zařízení zadává. Nepředpokládám, že by bylo spoustu uživatelů kteří by na všech ostatních stánkách používali třeba tečku a tady na té by se najednou tam snažili nacpat čárku.

Nicméně kdyby to problém byl, tak se to dá samozřejmě vyřešit i tím javascriptem.
onkeyup="this.value = this.value.match(/\d+([.,]\d*)?/g)[0]"
Jen tedy bez té klávesnice. Z čehož na mobilu vždy rostu, když mám někam zadávat číselný údaj a zobrazí se mi tam ta klasická.
N71
Profil *
iOS zobrazuje kompletní klávesnici (implicitně přepnutou do číselné a interpunkční klávesnice).
Co se týče desetinných čísel, number input je na vstupu velmi tolerantní, chápe desetinnou tečku i čárku, exponenty i záporné znaménko.
Kajman
Profil
Je možné, že si špatně vybavuji, ale viděl jsem stránku, kde pro zadání ip bylo chybně nastavené inputmode=numeric. Měl jsem pocit, že třeba před dvěma lety tam byly i tečky a před rokem na iphonu tečka zmizela.

A ještě víc let dozadu mě trápilo, že na desktopu prohlížeč akceptoval jen desetinnou tečku nebo čárku. Od té doby raději volím pro zadávání necelých čísel type=text, aby mohl např. v českém prostředí zapsat uživatel desetinnou tečku i čárku.
N71
Profil *
Nemám úplně v hlavě, jak to bylo dřív, ale dnes <input type=number> vezme tečku i čárku. Výhoda je, že na výstupu je pak validní float s tečkou.
iOS zobrazuje tuto klávesnici. Pokud můžu posoudit, je to tak už hodně dlouho. Existuje pak ještě stručnější klávesnice, ale ta je jen na telefonní čísla.

Jinak obecně platí, <input type=number> se hodí jen na aritmeticky zpracovatelná čísla a na nic jiného. Tedy nikoliv na IP adresy, rodná čísla, telefonní čísla, PSČ, IČO a tak dále.
pajadvorak
Profil
Děkuji. Zdálo by se, že problém vyřeším input type=number, ale bohužel nedokážu jednoduše vyřešit problém, kdy v inputu nastavím step=0.5. Přes jquery měním hodnotu v tabulce (ajax). Ale když zadám hodnotu na např. 0.6, tak mi to odešle formulář a zapíše se do tabulky hodnota mimo step.

Jakým způsobem bych toto měl správně řešit? Bohužel nezafunguje input, který by měl pohlídat, že hodnota je mimo step a zabránit odeslání formuláře.
N71
Profil *
Implementace se tady může lišit. Validovat hodnotu bys měl tak jako tak sám na klientovi (volitelně) a na serveru (určitě).
Keeehi
Profil
pajadvorak:
Validace na straně serveru je potřeba vždy. Když javascriptem skrz funkci submit() odesíláš formulář, ta funkce opravdu formulář jen odešle. Neprovádí se validace inputů. Řešením je tedy použít requestSubmit, která se chová tak, jako by uživatel kliknul na submit button. Tedy validace v klientovi se provede. Nefunguje to v IE ale to tě asi trápit nemusí. Další možností by asi bylo místo volání submit na formuláři vytvořit event click na submit buttonu. To by mohlo také zafungovat.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0