
javascriptで複数のセレクトメニューを対象に、選択した時点で値を取得して、その合計を計算したいのですが、値を外にもって出ることができません、アドバイスをいただけないでしょうか?
【HTML】
<select id="aPrice">
<option value="100">100</option>
<option value="200">200</option>
<option value="300">300</option>
<option value="400">400</option>
<option value="500">500</option>
</select>
<select id="bPrice">
<option value="1500">1500</option>
<option value="1800">1800</option>
<option value="1300">1300</option>
<option value="2500">2500</option>
<option value="4800">4800</option>
</select>
【JS】
const total = 0;
const aPrice = document.getElementById("aPrice");
let aVal = 0;
aPrice.addEventListener("change", function () {
aVal = aPrice.value;
})
const bPrice = document.getElementById("bPrice");
let bVal = 0;
bPrice.addEventListener("change", function () {
bVal = bPrice.value;
})
それぞれの取得した値、上記の場合aVal とbVal に選択した値が入っているのですが、これらの金額を外の変数 total に入れて合計を出したいのですが、それぞれの関数の外に出してしまうと値が取得できなくなってしまいます。
そもそもセレクトの値を取得するにあたって方法が根本的に間違っていますでしょうか?
初歩的な質問ですみません、アドバイスを頂けますと幸いです。
宜しくお願いします。
No.1ベストアンサー
- 回答日時:
こんばんは
>その合計を計算したいのですが、値を外にもって出ることができません、
ご提示の方法であれば、関数外からも参照できるはずです。
(関数外で、変数 aVal, bVal が宣言されていますので)
ただし、セレクト要素が変更された際に、変数にその値が代入されるようになっていますので、その後で合計の計算をしないと、正しい値を得ることはできません。
実際に参照する部分が提示されていませんので、推測になってしまいますが・・
想像するところ、ご提示のスクリプトに続けて
total = aPrice + bPrice
などと記述していませんでしょうか?
その場合は、初期値のままでの計算になるので、 aVal, bVal 共に0の状態なので、合計の結果は0になると思います。
>アドバイスをいただけないでしょうか?
合計を算出なさりたければ、changeイベントの処理内で合計を計算するようにしてください。
( aVal, bVal に値が入った後で計算するという意味です)
そうすれば、お望みの結果になるものと想像します。
ご提示の構文形式だと、それぞれ別の処理になっているので記述が重複してしまいますが、まとめて処理することも可能です。
以下は、そのような考え方での一例です。
<script>
{
const
ids = ['aPrice', 'bPrice'],
V = id => document.getElementById(id).value * 1;
document.addEventListener('change', e => {
if(ids.indexOf(e.target.id)<0) return;
const total = V(ids[0]) + V(ids[1]);
alert(`合計=${total}`); // ひとまずアラート表示
});
}
</script>
ありがとうございます!
ちょっと私には書き方が難しい部分があるのですが、調べながら進めてみたいと思います。
>>total = aPrice + bPrice
漏れており申し訳ありません、おっしゃる通りこのような感じで取得しておりました。
V = id => document.getElementById(id).value * 1;
↑このような書き方も初見でしたので、調べてみたいと思います。
このような初心者の質問にご回答いただきまして感謝申し上げます、ありがとうございます!mm
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript console.logがどうしても2つ機能しないのでアドバイスをくださいお願いします 2 2022/07/07 22:13
- JavaScript 電車の運賃を出すプログラムを作っています。 2 2022/06/22 09:36
- JavaScript 中百舌鳥駅と深井駅を入れ替えて選択しても同じ挙動にしたいです。 2 2022/06/24 18:45
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
- JavaScript JavascriptからSQLへ繋ぎ方が分からない 3 2022/07/07 00:27
- JavaScript 【急募】選択した物件と施設の距離をランキング&条件によって画像表示を変更する方法。 2 2021/12/24 07:08
- JavaScript セレクトボックスを2つ選択してメッセージなどを表示するには。~運賃検索プログラムを完成させたい~ 1 2022/07/22 11:10
- JavaScript セレクトボックスで配列を呼び出したい。 1 2022/07/08 20:14
- JavaScript 1度きりではなく、繰り返し、挙動が変わるようにしていただきたいです。 1 2022/07/03 15:50
- JavaScript セレクトを全て選択されていないと、文字によるエラーメッセージを表示させるコードを調べています 2 2023/06/22 15:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プルダウン選択を変更すると、...
-
selectを変更不可にしたい
-
javascriptでセレクトボックス...
-
ラジオボタンの選択に応じてプ...
-
セレクトボックスの初期選択と...
-
今日の日付を自動的にセレクト...
-
ラジオボタンの選択でセレクト...
-
JavaScripsのDOMについてなんで...
-
同じ名前のセレクトがある場合...
-
ラジオボタンとプルダウンを連...
-
VBScriptでHTMLのセレクトボッ...
-
プルダウンのoptionの表示・非...
-
プルダウンの値によって活性・...
-
selectの初期値を設定したい
-
セレクトメニューの値をクッキ...
-
option 選択による表示&非表示
-
同じ物を3つ配置したいのですが
-
select 表示順
-
複数のプルダウンを1つにまとめ...
-
return trueとreturn falseの用...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
<input>の選択肢をプルダウンメ...
-
プルダウン選択を変更すると、...
-
javascriptでセレクトボックス...
-
スマホのフォームでのselect複...
-
二つのセレクトボックス間での...
-
全てのselect要素をデフォルト...
-
同じ名前のセレクトがある場合...
-
JavaScriptで<select>の<option...
-
ラジオボタンの値が取得できな...
-
<select> をmultiple にしてい...
-
Selectボックスの一覧表示方法
-
プルダウンの値によって活性・...
-
selectで選ばれた値を別ページ...
-
プルダウンのoptionの表示・非...
-
【JavaScript】プルダウンで数...
-
Selectボックスの要素入力を省...
-
javascriptでセルを矩形で選択する
-
セレクトボックスを2つ選択して...
-
return falseが効かない
-
IDをvalueの値でなく、class名...
おすすめ情報