2017-02-15 15 views
0

У меня проблема с вычислениями с числами в jquery. Когда число находится в числовом формате PHP, jquery не обнаруживает эти числа. Пожалуйста, найдите код и экранный снимок вывода. Любая помощь будет оценена по достоинству.Формат номера PHP не позволяет суммировать сумму jQuery

<tr class="noBorder"> 
    <td><span class="circle">1A</span></td> 
    <td><input type="text" class="amnt" value="<?php echo number_format($a1,2);?>"/></td> 
    </tr> 
    <tr class="noBorder"> 
    <td><span class="circle">4</span></td> 
    <td><input type="text" class="amnt" id="4tax" /></td> 
    </tr> 
    <tr class="noBorder"> 
    <td><span class="circle">5A</span></td> 
    <td><input type="text" class="amnt" id="5a" /></td> 
    </tr> 
    <tr class="noBorder"> 
    <td><span class="circle">7</span></td> 
    <td><input type="text" name="7" class="amnt"/></td> 
    </tr> 
    <tr class="noBorder"> 
    <td><span class="circle">7A</span></td> 
    <td><input type="text" name="7a" class="amnt" /></td> 
    </tr> 
    <tr class="noBorder"> 
    <td>1A+4+5A+7+7A</td> 
    <td><span class="circle">8A</span></td> 
    <td> 
<input type="text" id="8a" /> 
    </td> 
    </tr> 

Jquery

$(".amnt").on("keydown keyup", function() { 
     calculateSum(); 
    }); 
function calculateSum() { 
    var sum2 = 0; 
    $(".amnt").each(function() { 
     //add only if the value is number 
     if (!isNaN(this.value) && this.value.length != 0) { 
      sum2 += parseFloat(this.value); 
      //$(this).css("background-color", "#FEFFB0"); 
     } 

    }); 

} 

Выход: 8A = 1A + 4 + 5A + 7 + 7A enter image description here

+2

_Пожалуйста, найдите соответствующую часть кода ... Пожалуйста, разместите соответствующий код или выделите его :) BTW нет такой вещи, как номер PHP –

+0

Я выделил код :) Я имел в виду PHP number_format:) – Zendie

+1

Проверьте разметку (визуализированный html), а не PHP, чтобы увидеть, что происходит. Кроме того, что произойдет, если вы измените 'else if' только на' else' (временно) и раскомментируете прокомментированный код? – Archer

ответ

2

Пожалуйста, проверьте это: -

$(".amnt").on("keydown keyup", function() { 
 
    calculateSum(); 
 
}); 
 
function calculateSum() { 
 
var sum2 = 0; 
 
$(".amnt").each(function() { 
 
    //add only if the value is number 
 
    if (this.value.indexOf(',') > -1) { 
 
     sum2 += parseFloat(this.value.split(",").join("")); 
 
    }else if(!isNaN(this.value) && this.value.length != 0) { 
 
     sum2 += parseFloat(this.value); 
 
     $("#sum").text(sum2).css("background-color", "#FEFFB0"); 
 
    } 
 
}); 
 

 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type = "text" class= "amnt" value = "8,133,231.17"><br/> 
 
<input type = "text" class= "amnt" value = ""><br/> 
 
<input type = "text" class= "amnt" value = ""><br/> 
 
<div id = "sum"></div>

+0

Я пытаюсь это сделать. спасибо – Zendie

+0

Да, это работает. Но мне не хватает формата номера в 1A field.it только 8133231.17 – Zendie

+0

Хорошо, я проверю его – Zendie

2

Javascript не может обрабатывать числа с , в нем как тысяч разделителей. Это не число, это строка в формате. Сделайте следующее:

<?php echo number_format($a1, 2, '.', '');?> 

UPD. В JS вы можете удалить , с this.value.replace(/,/g, "") удалить запятые:

parseFloat("12,233.12") 
>12 
parseFloat("12,233.12".replace(/,/g,"")) 
>12233.12 

$(".amnt").on("keydown keyup", function() { 
 
     calculateSum(); 
 
    }); 
 
function calculateSum() { 
 
    var sum2 = 0; 
 
    $(".amnt").each(function() { 
 
     var thevalue = this.value.replace(/,/g,''); 
 

 
     if (!isNaN(thevalue) && thevalue .length != 0) { 
 
      sum2 += parseFloat(thevalue); 
 
      $("#sum").text(sum2).css("background-color", "#FEFFB0"); 
 
     } 
 
    }); 
 

 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type = "text" class= "amnt" value = "8,133,231.17"><br/> 
 
<input type = "text" class= "amnt" value = ""><br/> 
 
<input type = "text" class= "amnt" value = ""><br/> 
 
<div id = "sum"></div>

+0

Спасибо за ответ. я попытался изменить sum2 + = parseFloat ((this.value) .replace (",", "")); Но не получилось. – Zendie

+0

$ (". Amnt"). Each (function() {sum2 + = parseFloat ((this.value) .replace (",", ""));}); Я сделал это. Но не работал – Zendie

+0

позвольте мне попробовать – Zendie