Клавиша ввода Javascript первое значение = «-» не NaN

#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?