0

使用 javascript 对提交执行计算时遇到错误。pay_amount 输入提交“1”,total_charged 提交“4.95”,无论pay_amount 的值是多少。

这是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,认为这是逗号的问题,但我仍然遇到问题。

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

这里到底发生了什么?

4

6 回答 6

3

parseFloat()例程看到不属于有效数字的内容时,它会停止解析。在你的情况下,这是逗号。

当您按照帖子中的建议更改代码时,您修复了逗号问题,但您将值保留为字符串。如果你将两者结合起来——去掉逗号调用parseFloat()——效果会更好。

也就是说,如果您不打算在服务器上检查付款和费用计算,请在完成后发布您的电子商务网站的 URL。

于 2013-04-18T20:08:57.223 回答
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>
于 2013-04-18T20:17:02.417 回答
1

Try this

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

instead of

<input type="submit" value="submit" onclick="submitCard();" id="submitButton"/>
于 2013-04-18T20:07:35.620 回答
1

您应该阻止原始提交

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

    ...

</form>
于 2013-04-18T20:03:30.610 回答
0

尝试

document.forms[0].submit();

而不是document.forms.submit()你现在拥有的。
无论它是否解决了document.form未定义的问题,都应该更改它。

于 2013-04-18T20:04:57.163 回答
0

幸运的是,这与表单的事件无关submit,更多的是与属性的字符串类型如何value转换为数学运算的数字有关。

查看这个JSFiddle以了解如何parseFloat()更好地使用。

这是重要的部分:

parseFloat(document.getElementById('pay_amount').value.replace(',', ''));
于 2013-04-18T20:11:22.113 回答