2013-04-18 2 views
0

У меня возникает ошибка при выполнении расчета на отправке с помощью javascript. Вход pay_amount отправляет «1», а total_charged отправляет «4.95» независимо от того, что такое значение pay_amount.Расчет Javascript из идентификатора ввода html всегда приводит к 1

Вот HTML:

<form method="POST" action="example-post-url.php" autocomplete="off" name="form" id="form"> 

    <input type="text" id="pay_amount" name="pay_amount" value="1,794.00"/> 
    <input type="hidden" id="total_charged" name="total_charged" /> 

    <input type="submit" value="submit" onclick="submitCard();" id="submitButton"/> 

</form> 

Вот JavaScript:

<script> 
    function submitCard(){ 

     var payment = parseFloat(document.getElementById('pay_amount').value); 
     var fee = ((payment*0.035)+3.95); 
     var total = payment + fee; 
     document.getElementById('total_charged').value = total.toFixed(2); 

     document.form.submit(); 
    } 
</script> 

Я попытался заменить уаг платеж с кодом ниже, думая, что проблема с запятой, но я м все еще сталкиваются с проблемами.

var payment = document.getElementById('pay_amount').value.replace(/,/g, ''); 

Что в мире происходит здесь?

+0

Я очень сомневаюсь, что с этим кодом там, "pay_amount" представляется на сервере как "1". – Pointy

ответ

1

Вы должны предотвратить оригинал представить

<form ... onsubmit="return false;" ...> 

    ... 

</form> 
0

Попробуйте

document.forms[0].submit(); 

Вместо document.forms.submit() что и у вас есть прямо сейчас.
Это должно быть изменено независимо от того, разрешает ли оно проблему, поскольку document.form не определен.

+0

Однако ваш код гораздо более адекватен лучшим практикам, и OP должен следовать вашему совету, 'document.form' не является неопределенным в этом случае, так как в этом документе есть элемент формы с именем «форма». – Luc125

+0

@ Luc125 Не поймал это. –

1

Попробуйте

<input type="button" value="submit" onclick="submitCard();" id="submitButton"/> 

вместо

<input type="submit" value="submit" onclick="submitCard();" id="submitButton"/> 
3

parseFloat() В обычные остановки разбора, когда он видит то, что это не является частью действительного числа. В вашем случае это запятая.

При изменении кода, предложенного в сообщении, вы исправляете проблему с запятой, но вы оставляете значение в виде строки. Если вы объедините два —, то избавитесь от запятой и позвоните по номеру parseFloat() — будет работать лучше.

Если вы не собираетесь проверять расчет платежей и платежей на сервере, отправьте URL-адрес своего сайта электронной торговли после его завершения.

0

К счастью, это не имеет никакого отношения к событию формы submit и больше относится к тому, как строковый тип атрибута value преобразуется в число для математических операций.

Ознакомьтесь с этим номером JSFiddle, чтобы узнать, как использовать parseFloat().

Вот важная часть:

parseFloat(document.getElementById('pay_amount').value.replace(',', '')); 
+0

** ЗАПОМНИТЕ **, чтобы удалить инструкцию отладки console.log() перед ее развертыванием. – oomlaut

1

попробовать это:

<script> 
    function submitCard(){ 

     var payment = parseFloat(document.getElementById('pay_amount').value); 
     var fee = ((payment*0.035)+3.95); 
     var total = payment + fee; 
     document.getElementById('total_charged').value = total.toFixed(2); 
    } 
</script> 
Смежные вопросы