2016-12-05 6 views
0

Я пишу код для использования некоторых функцийДобавьте 2 цифры и показать результат на этикетке с запятой в

Мой первый текстовое поле

<asp:TextBox ID="txtLeasePaymentFixed" type="text" runat="server" class="number" CssClass="form-control" Style="text-align: right" TabIndex="101" placeholder="e.g 123,456,789" onKeyUp="fncCalculateSum()" onBlur="fncCalculateSum()"></asp:TextBox> 

Мой второй текстовый блок

<asp:TextBox ID="txtLeasePaymentVairable" type="text" runat="server" CssClass="form-control" Style="text-align: right" TabIndex="102" placeholder="e.g 123,456,789" onKeyUp="fncCalculateSum()" onBlur="fncCalculateSum()"></asp:TextBox> 

Этикетка на который показывает Толтал

<asp:Label ID="lbltotal" runat="server" Text=""></asp:Label> 

Функция вызова ONBLUR и OnKeyUp, как это:

function fncCalculateSum() { 


     var LeasePaymentFixed = $('#MainContent_txtLeasePaymentFixed'); 
     var LeasePaymentVariable = $('#MainContent_txtLeasePaymentVairable'); 
     if (LeasePaymentFixed.val() == '' || LeasePaymentFixed.val() == null) { 
      PaymentFixed = 0; 
     } 
     else { 
      PaymentFixed = parseFloat(LeasePaymentFixed.val()); 
     } 
     if (LeasePaymentVariable.val() == '' || LeasePaymentVariable.val() == null) { 
      PaymentVariable = 0; 
     } 
     else { 
      PaymentVariable = parseFloat(LeasePaymentVariable.val()); 
     } 


     (Sum) = PaymentFixed + PaymentVariable 

     if ((LeasePaymentFixed.val().trim() == '' && LeasePaymentVariable.val().trim() == '') || (LeasePaymentFixed.val() == null && LeasePaymentVariable.val() == null)) { 
      $("#MainContent_lbltotal").text(''); 
     } 
     else { 

      $("#MainContent_lbltotal").html(parseFloat(Sum)); 
     } 

    } 

Теперь я использую JQuery код, чтобы применить запятую в международном формате через каждые 3 цифры, как этот

 $('#MainContent_txtLeasePaymentFixed,#MainContent_txtLeasePaymentVairable,#MainContent_lbltotal').keyup(function(event){ 
      // skip for arrow keys 
      if(event.which >= 37 && event.which <= 40){ 
       event.preventDefault(); 
      } 
      var $this = $(this); 
      var num = $this.val().replace(/,/gi, "").split("").reverse().join(""); 

      var num2 = RemoveRougeChar(num.replace(/(.{3})/g,"$1,").split("").reverse().join("")); 

      console.log(num2); 


      // the following line has been simplified. Revision history contains original. 
      $this.val(num2); 
     }); 


     function RemoveRougeChar(convertString){ 


      if(convertString.substring(0,1) == ","){ 

       return convertString.substring(1, convertString.length)    

      } 
      return convertString; 

     } 

Когда я пишу цифры в первом тексте ящик с запятыми, это прекрасно. То же самое, когда я пишу во втором текстовом поле, но на нем не отображается сумма всех цифр на этикетке.

ответ

0

Остерегайтесь! Вы теряете данные с запятой в parseFloat преобразования:

let foo = 21231323.246; 
let bar = foo.toLocaleString("en-US"); // "21,231,323.246" 

console.log(parseFloat(bar)); // 21 

Вы должны проверить количество конверсий и убедитесь, что вы работаете на правильном количестве.

+0

Спасибо, что узнал, что Comma не может быть в parseflot, но как я могу передать результат и преобразовать его в parse float после этого –

+0

Я бы, вероятно, сохранил значение числа (перед форматированием) в элементе [DOM dataset] (http://html5demos.com/dataset) (например, 'el.dataset.value = number;'). Таким образом, вы можете получить первоначальное значение намного легче. –