来自html输入id的Javascript计算总是导致1

时间:2013-04-18 20:01:15

标签: javascript

我在使用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, '');

世界上到底发生了什么?

6 个答案:

答案 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(',', ''));