#javascript #html #jquery #input
Вопрос:
Здесь я хочу заполнить входное значение , начиная с value "-"
, это работает, если начальное значение-число, а затем добавить последнее "-"
значение, но здесь я хочу input value "-"
начать, а не "NaN"
во время input "-"
Это мой пример кода :
$(document).on("keyup change", ".cll_debit", function() { var sum = 0; $(".cll_debit").each(function(){ sum = $(this).val().replace(/./g, ""); }); $("#tl_debit").val(sum.toLocaleString("id-ID")); }); var $form = $( ".form" ); var $input = $form.find( "input" ); $input.on( "keyup", function( event ) { var $this = $( this ); var input = $this.val(); var input = input.replace(/[/a-z/A-Zs._=`] /g, ""); input = input ? parseInt( input, 10 ) : 0; $this.val( function() { return ( input === 0 ) ? "" : input.toLocaleString("id-ID"); } ); } );
lt;script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"gt;lt;/scriptgt; lt;div class="form"gt; lt;input type="text" class="cll_debit" autocomplete="off" value=""gt; lt;input type="text" class="cll_debit" autocomplete="off" value=""gt; lt;brgt;lt;brgt; lt;input type="text" id="tl_debit" value="0" readonlygt; lt;/divgt;
Здесь я нашел способ без toLocaleString, но input value="-"
он не работает
$(document).on("keyup change", ".cll_debit", function() { var sum = 0; $(".cll_debit").each(function(){ sum = $(this).val().replace(/./g, ""); }); $("#tl_debit").val(sum.toLocaleString("id-ID")); }); number_format = function (number, decimals, dec_point, thousands_sep) { number = number.toFixed(decimals); var nstr = number.toString(); nstr = ''; x = nstr.split('.'); x1 = x[0]; x2 = x.length gt; 1 ? dec_point x[1] : ''; var rgx = /(d )(d{3})/; while (rgx.test(x1)) x1 = x1.replace(rgx, '$1' thousands_sep '$2'); return x1 x2; } var $form = $( ".form" ); var $input = $form.find( "input" ); $input.on( "keyup", function( event ) { var $this = $( this ); var input = $this.val(); var input = input.replace(/D/g, ""); input = input ? parseInt( input, 10 ) : 0; $this.val( function() { return number_format(input, '', '.', '.'); } ); } );
lt;script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"gt;lt;/scriptgt; lt;div class="form"gt; lt;input type="text" class="cll_debit" autocomplete="off" value=""gt; lt;input type="text" class="cll_debit" autocomplete="off" value=""gt; lt;brgt;lt;brgt; lt;input type="text" id="tl_debit" value="0" readonlygt; lt;/divgt;
Здесь я добавил новую функцию, которая не связана с toLocaleString, но также не работает так, как я хочу, при вводе значения=»-» вообще не работает
Комментарии:
1. Вам нужно будет проверить, является ли то, что в данный момент содержится в поле, допустимым числом, прежде чем пытаться использовать его в математической операции.
2. «- «- это не число. Чего ты ожидаешь?
3. @Jens Я надеюсь, что когда «ввод» с
value "-"
работами, а неNaN
4. Вероятно, вам не следует заменять входное значение, если проанализированное значение
Number.NaN
5. @RimeldaPratama, чем не анализировать значение, если оно только «-»
Ответ №1:
Вы можете попробовать это :
$(document).on("keyup change", ".cll_debit", function() { var sum = 0; $(".cll_debit").each(function(){ sum = $(this).val().replace(/./g, ""); }); $("#tl_debit").val(sum.toLocaleString("id-ID")); }); var $form = $( ".form" ); var $input = $form.find( "input" ); $input.on( "keyup", function( event ) { var $this = $( this ); var input = $this.val(); var input = input.replace(/[/a-z/A-Zs._=`] /g, ""); if($(this).val().length gt; 1){ input = input ? parseInt( input, 10 ) : 0; $this.val( function() { return ( input === 0 ) ? "" : input.toLocaleString("id-ID"); } ); }else{ } } );
lt;script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"gt;lt;/scriptgt; lt;div class="form"gt; lt;input type="text" class="cll_debit" autocomplete="off" value=""gt; lt;input type="text" class="cll_debit" autocomplete="off" value=""gt; lt;brgt;lt;brgt; lt;input type="text" id="tl_debit" value="0" readonlygt; lt;/divgt;
Ответ №2:
Измените тип ввода с text
на number
, и после этого вы сможете пропустить все проверки регулярных выражений значений. Также знак минус будет работать правильно после этого, и код будет намного чище.
Если вам нужно изменить языковой стандарт, передайте атрибут lang id-ID
или значение navigator.language
.
$(document).on("keyup change", ".cll_debit", function() { var sum = 0; $(".cll_debit").each(function(){ sum = $(this).val(); }); $("#tl_debit").val(sum.toLocaleString("id-ID")); });
lt;script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"gt;lt;/scriptgt; lt;div class="form"gt; lt;input type="number" class="cll_debit" autocomplete="off" lang="id-ID"gt; lt;input type="number" class="cll_debit" autocomplete="off" lang="id-ID"gt; lt;brgt;lt;brgt; lt;input type="text" id="tl_debit" value="0" readonlygt; lt;/divgt;
Комментарии:
1. Нет
input toLocaleString
class cll_debit
, отсюда, я хочу иметьtoLocaleString
, есть ли какой-нибудь способ?2. @RimeldaPratama вы можете передать
lang
атрибут. У меня есть обновленный ответ3. здесь это не работает, и это то же самое
4. Здесь я хочу, чтобы он существовал автоматически во время ввода
5. @RimeldaPratama как вы хотите отображать числа в локали id_ID?