Autor Zpráva
Andrej.B
Profil
Zdravim,

rad by som si automaticky v INPUTE, kde zadavam mnozstvo kusov, formatoval pre Tisice.
Klasika
1000 - > 1 000
10000 - > 10 000
atd.

pouzil som kod z codepen.io/tutsplus/pen/PzpoWK a troska upravil na moj formular. Pri zadani cisla mi to funguje a automaticky mi v inpute prepisuje hodnotu ako potrebujem, ale kedze potom mi da aj value ako 10 000, prenasa mi to dalej ako 10%C2%A0000 cez GET. Ako sa to da osetrit?

Dakujem

<script>
(function($, undefined) {

    "use strict";

    // When ready.
    $(function() {
        
        var $form = $( "#gen_5" );
        var $input = $form.find( "input[name='mnozstvo[]']" );

        $input.on( "keyup", function( event ) {
            
            
            // When user select text in the document, also abort.
            var selection = window.getSelection().toString();
            if ( selection !== '' ) {
                return;
            }
            
            // When the arrow keys are pressed, abort.
            if ( $.inArray( event.keyCode, [38,40,37,39] ) !== -1 ) {
                return;
            }
            
            
            var $this = $( this );
            
            // Get the value.
            var input = $this.val();
            
            var input = input.replace(/[\D\s\._\-]+/g, "");
                    input = input ? parseInt( input, 10 ) : 0;

                    $this.val( function() {
                        return ( input === 0 ) ? "" : input.toLocaleString( "sk-SK" );
                    } );
        } );
        
        /**
        blokuje odosielanie, zakometovane zatial
        
        $form.on( "submit", function( event ) {
            
            var $this = $( this );
            var arr = $this.serializeArray();
        
            for (var i = 0; i < arr.length; i++) {
                    arr[i].value = arr[i].value.replace(/[($)\s\._\-]+/g, ''); // Sanitize the values.
            };
            
            console.log( arr );
            
            event.preventDefault();
        });
         */
        
    });
})(jQuery);

</script>
Firibix
Profil
Reakce na Andrej.B:
10%C2%A0000 je zakódované 10 000. Zjevně se tedy při odesílání neprovede odstranění mezer. To není nikterak překvapivé, když kód za to zodpovědný je na řádku 49 a ten je zakomentovaný.

Navíc nejspíš budeš chtít při odeslání jenom přepsat hodnotu inputu zpátky na neformátovanou a nechat prohlížeč formulář odeslat normálně. Tedy zhruba (netestoval jsem) něco takového:

$form.on('submit', function (event) {
    $input.val(function (i, value) {
        return value.replace(/[($)\s\._\-]+/g, '');
    }
}
Andrej.B
Profil
Pokial odkomentujem kod, tak mi neodosle vobec formular, proste po kliknuti na odoslanie sa nestane nic.

Pozeram do Inspectora a tam mam po klinkuti na odoslanie

name : "mnozstvo[]"
value : "10000"

Vypada, ze mi spoji to cislo ako ma, ale odfiltruje mi odoslanie cez button, ktory normalne funguje ak to robim bez toho scriptu.

<button type="submit" class="btn btn-outline-success  btn-block" name="gen_5" value="look" ><span class="material-icons">question_mark</span>Kontrola Dostupnosti</button>
Firibix
Profil
Reakce na Andrej.B:
Pokial odkomentujem kod, tak mi neodosle vobec formular
Kód dělá přesně to, co je v něm napsáno. Na objektu event volá metodu preventDefault(), tj. zruší výchozí chování události submit, což je odeslání formuláře. Alternativní řešení jsem popsal v [#2].
unlucky
Profil
mám tenhle kód, snad ti pomůže

function number_format (number, decimals, dec_point, thousands_sep) {
    // Strip all characters but numerical ones.
    number = (number + '').replace(/[^0-9+\-Ee.]/g, '');
    var n = !isFinite(+number) ? 0 : +number,
        prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
        sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
        dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
        s = '',
        toFixedFix = function (n, prec) {
            var k = Math.pow(10, prec);
            return '' + Math.round(n * k) / k;
        };
    // Fix for IE parseFloat(0.55).toFixed(0) = 0;
    s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');
    if (s[0].length > 3) {
        s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep);
    }
    if ((s[1] || '').length < prec) {
        s[1] = s[1] || '';
        s[1] += new Array(prec - s[1].length + 1).join('0');
    }
    return s.join(dec);
}   

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

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

0