dポイントプレゼントキャンペーン実施中!

いつもお世話になっています。

単価を選んで、利用量を入力して、積を表示するWEBページの作り方教えてください。
単価を選んで a に表示するところまでは出来ています。
単価a と 使用量x から 合計金額ax を求めたつもりが、undefined と表示されてしまいます。
どこを修正すればよいのか、教えて下さい。

<p>
<select name="a_select" onchange="a_out(this,'a');">
<option selected value="0">サービス内容を選択してください</option>
<option value="11">[サービス名11]</option>
<option value="12">[サービス名12]</option>
<option value="13">[サービス名13]</option>
<option value="14">[サービス名14]</option>
<option value="15">[サービス名15]</option>
<option value="16">[サービス名16]</option>
<option value="17">[サービス名17]</option>
</select>

単価:<span id='a'>10</span> 円/個 
使用量<input type="number" id="x" onchange="cal_ax('a','x','ax');">個 
計<span id='ax'></span> 円</p>

<script language="JavaScript">
function D(s) { return document.getElementById(s)};
function a_out(obj,A) {
var idx = obj.selectedIndex;
var value = obj.options[idx].value;
D(A).innerHTML = value;
}
function cal_ax(A,X,AX) {
var a = D(A).value;
var x = D(X).value;
var ax = parseInt(a)*parseInt(x);
D(AX).innerHTML = a;
}
</script>

A 回答 (1件)

こんにちは



>を求めたつもりが、undefined と表示されてしまいます。
計算の手順は合っているようですが、タイポだったり、取得できない属性を取得しようとしているようです。

>D(AX).innerHTML = a;
要素AXに表示するつもりなのは、変数axの内容ではないですか?

>var a = D(A).value;
要素D(A)はspan要素のはずですが、span要素には通常value属性はありません。
ですので、いきなりvalue属性を取得しようとしても、undefinedが返されます。
  D(A).textContent
で取得するか(←あまりお勧めではありません)、あるいは、元となっているセレクト要素の値を取得するのが宜しいでしょう。(←こちらがお薦めです)


なお、ご質問には直接関係ありませんが、現状では、一度値を計算してから単価の選択をやり直しても計算結果の表示が変わることはありません。
そのあたりも考慮したUIになさっておいた方が良さそうに思います。
    • good
    • 0
この回答へのお礼

fujillinさん、いつも回答ありがとうございます

>D(AX).innerHTML = a;
そうです、ax です。 どこにエラーが有るかわからないので、結果を色々といじっていた途中のリストでした。

>要素D(A)はspan要素のはずですが、span要素には通常value属性はありません。
ご指摘ありがとう御座います。
 var a = D(A).value;

 var D(A).textContent;
に変更したら動きました!

ということは、
 input の領域から値を読み取る場合は、 D(A).value;
 span要素から値を読み取る場合は、 D(A).textContent;
ということですね

>現状では、一度値を計算してから単価の選択をやり直しても計算結果の表示が変わることはありません。
承知しています。最終版は、
 <select name="a_select" onchange="b1out(this,'a');cal_ax('a','x','ax');">
のように、変更後の単価に合わせて再度計算するので問題ないと思っています。

お礼日時:2019/11/09 10:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!