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も見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
アマゾンのような評価の星を選択した情報を確認画面でも表示させたいです。
PHP
-
javascriptでbgmを自動再生する方法を教えてください。
JavaScript
-
ボタンが押されたらWebページの文字コードを 変える、というプログラミングを書きたいです。 目的は文
HTML・CSS
-
-
4
[初心者]javascriptのfor文でなぜか繰り返し処理をしない。理由がわかりません。
JavaScript
-
5
JavascriptでDom XSSの脆弱性対策を行いたい
JavaScript
-
6
特定の文字列を複数抜き出したいです。 関数かGAS、あるいは条件付き書式等で判別できたら教えて下さい
JavaScript
-
7
ホームページの事でおしえてください
CGI
-
8
プログラミングで詰まった時って皆さんどうしていますか?
その他(プログラミング・Web制作)
-
9
HTMLのbody内に<style>~</style>定義は作法的にOKでしょうか?
HTML・CSS
-
10
このjavascriptのif文、条件式になっていないですが、どういう意味ですか?
JavaScript
-
11
htmlの修正方法を教えていただきたいです。
HTML・CSS
-
12
正規表現
その他(プログラミング・Web制作)
-
13
IndexedDB を使ってファイルアップロード可能な掲示板を非同期通信で作成したい
JavaScript
-
14
大至急。webのシングルページを作ろうと考え、イラレでデザインをしました。 それからの手順で悩んでる
HTML・CSS
-
15
【JavaScript?HTML?】Webページでこのページは戻ることは出来ませんと表
JavaScript
-
16
質問です。 配列が100以上の場合は、100単位で繰り返し処理を実行したいのですが、どのように処理を
Java
-
17
かっこいいウェブを作るテク
HTML・CSS
-
18
オススメのプログラミングスクールあればお聞きしたいです。 ・PHPを学べる ・ポートフォリオ作成でき
PHP
-
19
Javascriptエラーの原因が分からない
JavaScript
-
20
HTMLタグに複数のクラスを設定する方法がわからない
JavaScript
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
全てのselect要素をデフォルト...
-
リストボックス内の重複したも...
-
selectを使った計算
-
javascriptでセレクトボックス...
-
selectボックスの選択結果を変...
-
phpと連動させるには?
-
<select> select...
-
プルダウンからの背景色変更
-
プルダウンメニューで画像を切...
-
まったく同じ<select>フォーム...
-
selectを変更不可にしたい
-
VBScriptでHTMLのセレクトボッ...
-
Selectボックスの幅を自動で広...
-
javascript作成してます。ラジ...
-
Pythonで会員サイトの自動ログ...
-
現在時刻を取得してフォームのs...
-
特定<table>内の<td>の色を変える
-
hiddenのvalueの値を変えたい
-
ラジオボタンにタブインデック...
-
javascriptで入力禁止文字をチ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
全てのselect要素をデフォルト...
-
javascriptでセレクトボックス...
-
Selectボックスの一覧表示方法
-
JavaScriptで<select>の<option...
-
プルダウン選択を変更すると、...
-
select要素のvalueを配列で取得...
-
selectを変更不可にしたい
-
<input>の選択肢をプルダウンメ...
-
ラジオボタンとプルダウンを連...
-
【JS】selectでchangeした時の...
-
VBScriptでHTMLのセレクトボッ...
-
リストボックス内の重複したも...
-
同じ名前のセレクトがある場合...
-
プルダウンの値によって活性・...
-
selectが変更されたらnameを指...
-
【javascript】連想配列からセ...
-
3つのselectでURLパラメータを...
-
複数のプルダウンを1つにまとめ...
-
selectボックスで選択数を制限...
-
セレクトボックスで配列を呼び...
おすすめ情報