2013-04-18 75 views
0

我在使用javascript進行提交時執行計算時遇到錯誤。無論pay_amount的值是多少,pay_amount輸入都會提交'1'並且total_charged提交'4.95'。來自html輸入ID的Javascript計算總是導致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付款,但我米仍然遇到問題。

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應該遵循您的建議'文檔。form'在這種情況下是不確定的,因爲在這個文檔中有一個名爲「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() —它會更好地工作。

也就是說,如果您不打算檢查服務器上的付款和費用計算,請在完成後發佈電子商務網站的網址。

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>