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 |
#2 · Zasláno: 20. 10. 2022, 20:51:34
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, ''); } } |
||
Časová prodleva: 4 dny
|
|||
Andrej.B Profil |
#3 · Zasláno: 24. 10. 2022, 12:17:00
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 |
#4 · Zasláno: 24. 10. 2022, 12:44:17
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 |
#5 · Zasláno: 25. 10. 2022, 12:17:16
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); } |
||
Časová prodleva: 1 rok
|
0