要するに、1回目の選択で中百舌鳥、2回目で深井を選択するのと、逆に1回目で深井、2回目で中百舌鳥と選択した場合とで同じ挙動するプログラムを作りたいです。
セレクトボックス内は数字に直しました。
以下はそのhtml文です。jsの部分はすべてお書きください。
もしこれに誰も答えられなかったら技術者は罵詈雑言を吐かれてもしょうがないものとみなします。
<!DOCTYPE html>
<meta charset="utf-8">
<title></title>
<style>
</style>
<body>
<p id=A>
<select id=B>
<option value="">--
<option value="sb01">中百舌鳥
<option value="sb02">深井
<option value="sb03">泉ケ丘
<option value="sb04">栂・美木多
<option value="sb05">光明池
<option value="a0">a0
<option value="a1">a1
<option value="a2">a2
</select>
<select id=C>
<option value="">--
<option value="sb01">中百舌鳥
<option value="sb02">深井
<option value="sb03">泉ケ丘
<option value="sb04">栂・美木多
<option value="sb05">光明池
<option value="b0">b0
<option value="b1">b1
<option value="b2">b2
</select>
</p>
<p id=D></p>
<script>
const vals = {
'sb01sb02':3.7,
'nakamozuizumigaoka':7.8,
'a0b0': 1.2,
'a0b1': 12,
'a0b2': 28.8,
},
len = [ 3, 6, 15, 30, 50],
prc = [140,160, 200, 250, 500],
f=(_,l=Math.round(_))=>D.textContent=l?prc[len.findIndex(_=>_>l)]+'円':'';
A.addEventListener('change',_=>f(vals[B.value+C.value]));
</script>
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
No1です。
気が付かなかったけれど、距離を算出しているのでしょうか?
であるなら、マトリックスのテーブルなんて持つ必要もないですね。
単独路線で考えれば、路線距離を持っていれば計算可能です。
後は、距離を運賃に換算するだけ。
複数路線の場合でも、路線ごとに同様の計算を行えば済みますね。
<p id=A>
<select>
<option value="">--
<option value="nakamozu">中百舌鳥
<option value="fukai">深井
<option value="izumigaoka">泉ケ丘
<option value="togamikita">栂・美木多
<option value="komyoike">光明池
<option value="izumithuou">和泉中央
</select>
<select>
<option value="">--
<option value="nakamozu">中百舌鳥
<option value="fukai">深井
<option value="izumigaoka">泉ケ丘
<option value="togamikita">栂・美木多
<option value="komyoike">光明池
<option value="izumithuou">和泉中央
</select>
</p>
<p id=D></p>
<script>
const
dist = [0, 3.7, 7.8, 10.2, 12.1, 14.3],
A = document.getElementById('A'),
S = A.querySelectorAll('select'),
D = document.getElementById('D');
A.addEventListener('click', e=>{
const b = S[0].selectedIndex, c = S[1].selectedIndex;
const d = (b && c)?`乗車距離は${Math.abs(dist[b-1] - dist[c-1]).toFixed(1)}km`:'';
D.textContent = d;
});
</script>
No.1
- 回答日時:
こんばんは
そもそもChromeでは動作しないし、不思議なロジックになっているようですけれど・・
>誰も答えられなかったら技術者は罵詈雑言を吐かれてもしょうがないものとみなします。
技術者ではありませんけれど、答えが付かないとすれば『誰も興味を持たなかった』ってことでしょう。
まぁ、勝手にみなすのはご自由ですけれど・・
方法や考え方はいろいろあると思いますが、重複があっても無くても単純に対応できる方法なら、全組み合わせのテーブルを作っておくのが簡単でしょう。
(ご提示のものが、サンプルなのか何なのかも不明なので・・)
選択肢に規則性があったり、何かのロジックがあるなら、もっと省略することも可能でしょうけれど。
例えば、二つの選択肢がまったく同じなら、テーブルは半分ですみますが、ご提示の例の場合は後半の内容が異なるようなので、そこは入れ替わることが無いものと考えれば、全部のテーブルを作成してまった方が簡単でしょう。
重複が多いようなら、ご提示のようにオブジェクトにしておいて、入れ替えたものと両方で検索して、ヒットしたほうを表示するという方法も考えられますね。
以下のサンプルでは、結果がわかりやすいように選択肢番号(1~8)を組み合わせた数字にしてあります。
例えば「12」は、「中百舌鳥」と「深井」の組み合わせといった具合。
入換えても同じ値になるようにテーブルを作成しておけばよいというだけのことです。
(6番目以降は入れ替わりがないので、それぞれ別の値になるようにしてあります)
<script>
const
d = [
[11, 12, 13, 14, 15, 16, 17, 18],
[12, 22, 23, 24, 25, 26, 27, 28],
[13, 23, 33, 34, 35, 36, 37, 38],
[14, 24, 34, 44, 45, 46, 47, 48],
[15, 25, 35, 45, 55, 56, 57, 58],
[61, 62, 63, 64, 65, 66, 67, 68],
[71, 72, 73, 74, 75, 76, 77, 78],
[81, 82, 83, 84, 85, 86, 87, 88]
],
B = document.getElementById('B'),
C = document.getElementById('C'),
D = document.getElementById('D');
document.getElementById('A').addEventListener('change', e=>{
const b = B.selectedIndex, c = C.selectedIndex;
const v = (b && c)?`${d[b-1][c-1]}円`:'';
D.textContent = v;
});
</script>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 1度きりではなく、繰り返し、挙動が変わるようにしていただきたいです。 1 2022/07/03 15:50
- JavaScript jsでは、'で区切った部分を改行することはできない。〇か×か。 1 2022/06/26 19:58
- JavaScript 電車の運賃を出すプログラムを作っています。 2 2022/06/22 09:36
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
- JavaScript JavascriptからSQLへ繋ぎ方が分からない 3 2022/07/07 00:27
- JavaScript console.logがどうしても2つ機能しないのでアドバイスをくださいお願いします 2 2022/07/07 22:13
- JavaScript セレクトボックスを2つ選択してメッセージなどを表示するには。~運賃検索プログラムを完成させたい~ 1 2022/07/22 11:10
- JavaScript セレクトボックスで配列を呼び出したい。 1 2022/07/08 20:14
- JavaScript セレクトを全て選択されていないと、文字によるエラーメッセージを表示させるコードを調べています 2 2023/06/22 15:48
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
全てのselect要素をデフォルト...
-
javascriptでセレクトボックス...
-
リストボックス内の重複したも...
-
プルダウンメニューに連動する...
-
セレクトボタンで特定の項目で...
-
<input>の選択肢をプルダウンメ...
-
ラジオボタンとプルダウンを連...
-
セレクトボックスの組み合わせ...
-
select+submit部分をonclikでsu...
-
セレクトボックスで配列を呼び...
-
2段階プルダウンで1段階目の選...
-
WebBrowserを使ってプルダウン...
-
動的なセレクトボックスの生成...
-
javascriptで選択肢が分かれる...
-
今日の日付を自動的にセレクト...
-
同一ページに複数のプルダウン...
-
jqueryでselect要素を表示・非...
-
プルダウン選択を変更すると、...
-
2段階連動セレクトボックスでの...
-
複数のプルダウンを1つにまとめ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プルダウン選択を変更すると、...
-
全てのselect要素をデフォルト...
-
【JS】selectでchangeした時の...
-
javascriptでセレクトボックス...
-
Selectボックスの一覧表示方法
-
複数のプルダウンを1つにまとめ...
-
コードレビューをお願いします。
-
JavaScriptで<select>の<option...
-
<input>の選択肢をプルダウンメ...
-
select要素のvalueを配列で取得...
-
selectを変更不可にしたい
-
VBScriptでHTMLのセレクトボッ...
-
ラジオボタンとプルダウンを連...
-
javascriptで合計金額を算出し...
-
中百舌鳥駅と深井駅を入れ替え...
-
同じ名前のセレクトがある場合...
-
セレクトボックスで配列を呼び...
-
今日の日付を自動的にセレクト...
-
プルダウンの値によって活性・...
-
サイト内の物件を複数の検索条...
おすすめ情報