Html-, css- és php-help
  • Malakai
    #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();
    // ...