- 締切済み
if文がうまくいかず、運賃計算できない。
javascriptで運賃計算をやっていますが、 いかんせん、if文の挙動がきちんと動かず、運賃計算できません。 問題はifにかかる内容だと思われます。 セレクトBから中百舌鳥をセレクトCから深井を選択した場合と Bから中百舌鳥、Cから泉ケ丘を指定した場合に違う指定にしたいのですが、 挙動がうまくいきません。 if((A.B.value == "nakamozu")&&A.C.value=="fukai"))が間違っているものと思われます。 以下はそのhtml文です。 <!DOCTYPE html> <meta charset="utf-8"> <title></title> <style> </style> <body> <form id=A> <select id=B> <option value="">-- <option value="nakamozu">中百舌鳥 <option value="fukai">深井 <option value="izumigaoka">泉ケ丘 <option value="a0">a0 <option value="a1">a1 <option value="a2">a2 </select> セレクトBとCは同じなため、省略。 </form> <p id=D></p> <script> if((A.B.value == "nakamozu")&&A.C.value=="fukai")){ const vals = { 'nakamozufukai':3.7, }, len = [1, 2, 4, 6, 8, 10, 12, 14, 16], prc = ['運賃170(90),<br>回数券1,700(900),<br>通勤_1か月6,540(3,270)_3か月18,640(9,320)_6か月35,320(17,660),通学_1か月3,030(1,520)_3か月8,640(4,320)_6か月_16,370(8,190)', '運賃170(90),回数券1,700(900),<br>通勤_1か月6,540(3,270)_3か月18,640(9,320)_6か月35,320(17,660),通学_1か月3,030(1,520)_3か月8,640(4,320)_6か月_16,370(8,190)', '運賃190(100),回数券1,900(1,000),<br>通勤_1か月7,360(3,680)_3か月20,980(10,490)_6か月39,750(19,880),通学_1か月3,470(1,700)_3か月9,690(4,850)_6か月_18,360(9,180)', '運賃210(110),回数券2,100(1,100),<br>通勤_1か月8,180(4,090)_3か月23,320(11,680)_6か月44,180(22,090),通学_1か月3,780(1,890)_3か月10,780(5,390)_6か月_20,420(10,210)', '運賃230(120),回数券2,300(1,200),<br>通勤_1か月8,990(4,500)_3か月25,630(12,820)_6か月48,550(24,280),通学_1か月4,160(2,080)_3か月11,860(5,930)_6か月_22,470(11,240)', '運賃250(130),回数券2,500(1,300),<br>通勤_1か月9,810(4,910)_3か月27,960(13,980)_6か月52,980(26,490),通学_1か月4,530(2,270)_3か月12,920(6,460)_6か月_24,470(12,240)', '運賃270(140),回数券2,700(1,400),<br>通勤_1か月10,620(5,310)_3か月30,270(15,140)_6か月57,350(28,680),通学_1か月4,910(2,460)_3か月14,000(7,000)_6か月_26,520(13,260)', '運賃290(150),回数券2,900(1,500),<br>通勤_1か月11,450(5,730)_3か月32,840(16,320)_6か月52,980(30,920),通学_1か月5,290(2,650)_3か月15,080(7,540)_6か月_28,570(14,290)'], f = (_, l = Math.floor(_)) => D.innerHTML = l ? prc[len.findIndex(_ => _ > l)] + '円' : ''; A.addEventListener('change', _ => f(vals[(_ = B.value) + (__ = C.value)] || vals[__ + _]));} else {const vals = { 'nakamozuizumigaoka':7.8, 'a0b0': 1.2, 'a0b1': 12, 'a0b2': 28.8, }, len = [1, 2, 4, 6, 8, 10, 12, 14, 16], prc = ['運賃170(90),<br>回数券1,700(900),<br>通勤_1か月6,540(3,270)_3か月18,640(9,320)_6か月35,320(17,660),通学_1か月3,030(1,520)_3か月8,640(4,320)_6か月_16,370(8,190)', '運賃170(90),回数券1,700(900),<br>通勤_1か月6,540(3,270)_3か月18,640(9,320)_6か月35,320(17,660),通学_1か月3,030(1,520)_3か月8,640(4,320)_6か月_16,370(8,190)', '運賃190(100),回数券1,900(1,000),<br>通勤_1か月7,360(3,680)_3か月20,980(10,490)_6か月39,750(19,880),通学_1か月3,470(1,700)_3か月9,690(4,850)_6か月_18,360(9,180)', '運賃210(110),回数券2,100(1,100),<br>通勤_1か月8,180(4,090)_3か月23,320(11,680)_6か月44,180(22,090),通学_1か月3,780(1,890)_3か月10,780(5,390)_6か月_20,420(10,210)', '運賃230(120),回数券2,300(1,200),<br>通勤_1か月8,990(4,500)_3か月25,630(12,820)_6か月48,550(24,280),通学_1か月4,160(2,080)_3か月11,860(5,930)_6か月_22,470(11,240)', '運賃250(130),回数券2,500(1,300),<br>通勤_1か月9,810(4,910)_3か月27,960(13,980)_6か月52,980(26,490),通学_1か月4,530(2,270)_3か月12,920(6,460)_6か月_24,470(12,240)', '運賃270(140),回数券2,700(1,400),<br>通勤_1か月10,620(5,310)_3か月30,270(15,140)_6か月57,350(28,680),通学_1か月4,910(2,460)_3か月14,000(7,000)_6か月_26,520(13,260)', '運賃290(150),回数券2,900(1,500),<br>通勤_1か月11,450(5,730)_3か月32,840(16,320)_6か月52,980(30,920),通学_1か月5,290(2,650)_3か月15,080(7,540)_6か月_28,570(14,290)'], f = (_, l = Math.floor(_)) => D.innerHTML = l ? prc[len.findIndex(_ => _ > l)] + '円' : ''; A.addEventListener('change', _ => f(vals[(_ = B.value) + (__ = C.value)] || vals[__ + _])); } </script> if文の挙動がおかしいため、どうしても、表示がうまくいきません。 どうしたらいいですか。 後、scriptの内容は、1つ目のイベントの部分は残さず書いといてください。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- chie65536(@chie65535)
- ベストアンサー率44% (8803/19962)
>if((A.B.value == "nakamozu")&&A.C.value=="fukai"))が間違っているものと思われます。 丸括弧始め「(」の個数と、丸括弧閉じ「)」の個数を数えてみましょう。 判りやすいように、括弧内の英数字記号を消すと if(( ) )) になります。「(」の数と「)」の数は同じで無ければなりません。
補足
if((A.B.value == "nakamozu")&&(A.C.value=="fukai"))にしましたけれど、うまくいきませんでした。 ヽ(`Д´)ノプンプン。 javascriptでは解決しようがないので、javascript自体が、腐ったシステムなのですね。