あなたのコードで:
> function fixOrder() {
> const TAX = 0.975;
const
は将来の予約語であり、ECMAScript の一部ではありません。これはJavaScriptに追加されており、ECMAScript の将来のバージョンに含まれる可能性がありますが、サポートしていないブラウザーではエラーがスローされるため、一般的な Web では使用しないでください。
> var numPrice;
> var total;
> var tax;
>
> numPrice = parseFloat(document.getElementById("cost").value, 10);
parseFloatは単一の文字列引数を受け入れます。parseInt には基数はありません。文字列を数値に変換する方法はたくさんあります。1 つは単項演算+
子で、もう1 つはNumber
関数として呼び出されます。parseFloat
おそらく問題ありませんが、入力するだけです。
コントロールはフォームにあるため、フォームの名前付きプロパティとしてより簡単にアクセスできます。
var form = document.getElementById('form');
numPrice = +form.cost.value;
> tax = parseFloat(document.getElementById("tax").value, 10);
という名前の変数が既に存在しますTAX
。この値はどこにも使用されていません。
> total = parseFloat(document.getElementById("total").value, 10);
> numPrice = numPrice * TAX;
> total = numPrice;
ここでは、 の値がtotal
2 回割り当てられ、2 番目が最初の値を置き換えます。
> total = document.getElementById("total").value = "$" + total.toFixed(2);
このタイプの割り当ては保守には適していません。単純に保つ方がはるかに優れています。またtotal
、先頭に「$」が付いているように見えるため、parseFloat
が返されNaN
ます。フォームのテキストに「$」を入力し、フィールドに値を入力することをお勧めします。
算術演算に複合演算子を使用できます。混乱する可能性がありますが、何度も使用すると見つけやすくなります。おそらくあなたは次のことを意味しました:
total = parseFloat(form.total.value);
numPrice *= TAX;
total += numPrice;
form.total.value = total.toFixed(2);
HTML 部分:
> <p>Total: <input type="text" id="total" name="total" value="" disabled=
"disabled" /></p>
無効な外観になるため、合計フィールドを無効にしたくありません。また、disabled 属性に値は必要ありません (XHTML を使用していて、実際に Web 上で誰も使用していない場合を除きます)。
フィールドを読み取り専用にすることができます:
<p>Total: $<input type="text" name="total" readonly></p>
しかし、ユーザーは、なぜ変更できないフィールドがあるのか不思議に思うでしょう。代わりにスパンにして、そのテキストまたは innerHTML を更新することを検討してください。
<p>Total: $<span id="total">0.00</span></p>
と
document.getElementById('total').innerHTML = total.toFixed(2);
次に、コンテンツを太字または simlar としてスタイル設定することもできます。