Html-, css- és php-help
-
#22703 1. Html-ben egy number input-nál úgy lehet float-ot használni, ha step attribútumként egy tizedest adsz meg.
Pl. 2 tizedesig:
<input type="number" step="0.01" />
Amennyiben ezt teszed a javascript oldalon parseInt helyett parseFloat-al kell beolvasni.
Ha float-ot használsz érdemes szem előtt tartani, hogy amiatt ahogy a javascript tárolja a float-ot várhatóak precizitás béli problémák.
Ha nem kerül túl nagy számokkal használatra, akkor egyszerűen lehet tizedesig kerekíteni.
Pl.:
function roundTo(num, dec = 2) {
const pow = 10 ** dec
return Math.round(num * pow) / pow
}
2. Itt a probléma, hogy sajnos a magyar tizedes vesszőt használ, míg a number input tizedes pontot vár. Ennek kezelése OS/böngésző/nyelv függő. Firefox támogatja a lang attríbutumot az input-on, amit ha pl "hu"-ra állítasz, akkor elfogadja a vesszőt (és a pontot is). Sajnos Chrome ezt nem támogatja és ő mindig pontot vár.
Megoldás sajnos nem egyszerű, mert chromium number input ezen funckiója még mindig a blackbox mögött van és nekem egy "pont" input event szimulálásával sem sikerült átverni, max elég béna módon egyből egy 0-át is odarakni a pont mögé, amikor vesszőt ütsz.
Amennyiben fontos, egy megoldás, ha felhagysz a type="number"-el és sima sima szövegeset használsz inkább. Ez esetben sok kényelmi funkciót viszont újra kell implementálni.
Valami nagyon minimál példának:
<input type="text" inputmode="decimal" pattern="-?[0-9]+([\.,][0-9]+)?" />
3. Ez a legegyszerűbb.
// ...
osszeg_input.value = parseInt(osszeg_input.value) + parseInt(ujszam_input.value);
ujszam_input.value = '';
ujszam_input.focus();
// ...