我在使用javascript执行提交计算时遇到错误。无论pay_amount的值是多少,pay_amount输入都会提交'1',而total_charged会提交'4.95'。
这是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付款,认为这是逗号的问题,但我仍遇到问题。
var payment = document.getElementById('pay_amount').value.replace(/,/g, '');
世界上到底发生了什么?
答案 0 :(得分:3)
parseFloat()
例程在看到不属于有效数字的内容时停止解析。在你的情况下,这是逗号。
当您按照帖子中的建议更改代码时,可以修复逗号问题,但将值保留为字符串。如果你把两者结合起来 - 摆脱逗号和调用parseFloat()
- 它会更好。
也就是说,如果您不打算检查服务器上的付款和费用计算,请在完成后发布电子商务网站的网址。
答案 1 :(得分:1)
您应该阻止原始提交
<form ... onsubmit="return false;" ...>
...
</form>
答案 2 :(得分:1)
试试这个
<input type="button" value="submit" onclick="submitCard();" id="submitButton"/>
而不是
<input type="submit" value="submit" onclick="submitCard();" id="submitButton"/>
答案 3 :(得分: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>
答案 4 :(得分:0)
尝试
document.forms[0].submit();
而不是你现在拥有的document.forms.submit()
无论是否解决问题都应该更改,因为document.form
未定义。
答案 5 :(得分:0)
幸运的是,这与表单的submit
事件无关,而更多地与value
属性的字符串类型如何转换为数字运算的数字有关。 / p>
查看此JSFiddle了解如何更好地使用parseFloat()
。
这是重要的部分:
parseFloat(document.getElementById('pay_amount').value.replace(',', ''));