-1

Javascript を使用してコードを作成しましたが、計算ボタンを押すとエラーが発生します。

使用している式は次のとおりです。

A + B + C + D x E% + F =

私が受け取っているエラーは次のとおりです。

{"エラー": "POST リクエストを使用してください"}

使用しているコードは次のとおりです。

// define a function to perform our calculation.
function calculate() {
// retrieve the values from the amount and percentage fields
// and store them in variables.
var A = $('#A').val();
var B = $('#B').val();
var C = $('#C').val();
var D = $('#D').val();
var E = $('#E').val();
var F = $('#F').val();

// calculation
var total = A + B + C + D * (E / 100) + F;

$('#total').val(total.toFixed(2));

return false;
}

$('#calculator').submit(calculate);



<form id="calculator">
<p>Base:
    <input id="A" value="0.00" />
</p>
<p>Rush:
    <input id="B" value="0.00" />
</p>
<p>Added:
    <input id="C" value="0.00" />
</p>
<p>Extra:
    <input id="D" value="0.00" />
</p>
<p>Ship:
    <input type ="hidden" id="E" value="5" />
</p>
<p>
    <input id="F" value="0.00" />
</p>
<hr />
<p>Total:
    <input id="total" disabled="disabled" />
</p>
<p>
    <input type="submit" />
</p>
</form>
4

4 に答える 4

2

TypeErrorの途中で未処理のエラーが発生していますcalculate():

$('#total').val(total.toFixed(2));
// TypeError: Object 0.000.000.0000.00 has no method 'toFixed'

スローされてもreturn false;評価されず、<form>通常どおり送信されます。そして、{"error": "Please use POST request"}リクエストは で送信されるため、リクエストの処理を拒否する JSFiddle の方法ですHTTP GET

エラーは、、、totalなどがsAではなく、連結もしているためです。BNumber+

var total = A + B + C + D * (E / 100) + F;
// total = "0.00" + "0.00" + ... + "0.00";

<input>値は常にs であるため、 concatではなく sを追加するには、値を解析するString必要があります。 Number String

var A = parseFloat($('#A').val());
var B = parseFloat($('#B').val());
var C = parseFloat($('#C').val());
var D = parseFloat($('#D').val());
var E = parseFloat($('#E').val());
var F = parseFloat($('#F').val());

http://jsfiddle.net/wKr3u/


そして、違いはほとんどの場合無視できますが、e.preventDefault()( Jeff Mercado が示唆したように) よりも 1 つの利点がありreturn falseます。

イベントハンドラーでより早く使用できるため、エラーが発生してもデフォルトのアクションを引き続き防止できます。

function calculate(ev) {
    ev.preventDefault();

    // retrieve the values from the amount and percentage fields
    // ...
}
于 2013-06-30T02:30:54.587 に答える
1

実際に送信せずに合計を計算したい場合は、送信イベントの進行を停止する必要があります。

$('#calculator').on('submit', function(ev) {
    ev.preventDefault();
    calculate();
});
于 2013-06-30T01:44:20.920 に答える
0

このエラーを与えるコードtotal.toFixed(2)では、デフォルトで JavaScript は値を文字列として受け取るため、それを処理する必要があります

アップデート

文字列から数値へ

var total = A*1 + B*1 + C*1 + D * (E / 100) + F*1;

ここに解決策があります

于 2013-06-30T01:47:48.557 に答える