• 締切済み

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つ目のイベントの部分は残さず書いといてください。

みんなの回答

  • chie65535
  • ベストアンサー率43% (8536/19410)
回答No.1

>if((A.B.value == "nakamozu")&&A.C.value=="fukai"))が間違っているものと思われます。 丸括弧始め「(」の個数と、丸括弧閉じ「)」の個数を数えてみましょう。 判りやすいように、括弧内の英数字記号を消すと if(( ) )) になります。「(」の数と「)」の数は同じで無ければなりません。

sembokulove
質問者

補足

if((A.B.value == "nakamozu")&&(A.C.value=="fukai"))にしましたけれど、うまくいきませんでした。 ヽ(`Д´)ノプンプン。 javascriptでは解決しようがないので、javascript自体が、腐ったシステムなのですね。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • javascriptのifの中にconstはNG?

    javascriptで運賃計算プログラムを作成していますが、 次の問題で困っています。 if文の中にconstはNGなのでしょうか。 可能であれば、scriptの全文を書いてくださればありがたいです。 <!DOCTYPE html> <meta charset="utf-8"> <title></title> <style> </style> <body> <p 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> ここから先は同じなので省略 </p> <p id=D></p> <script> const vals = { 'nakamozufukai':3.7, '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>

  • 運賃と定期(運賃)を一緒に動くようにさせたいです。

    以下はそのjsです。 <script> const vals = { 'sb01sb02':3.7, 'sb01sb03':7.8, 'sb01sb04':10.2, 'sb01sb05':12.1, 'sb02sb03':4.1, 'sb02sb04':6.5, 'sb02sb05':8.4, 'sb03sb04':2.4, 'sb03sb05':4.3, 'sb04sb05':1.9, 'a0b0': 1.2, 'a0b1': 12, 'a0b2': 28.8, }, len = [1,2,4,6,8,10,12,14,16], prc = ['運賃170(90),回数券1,700(900),通勤_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),通勤_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),通勤_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),通勤_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),通勤_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),通勤_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),通勤_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),通勤_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.textContent=l?prc[len.findIndex(_=>_>l)]+'円':''; A.addEventListener('change',_=>f(vals[(_=B.value)+(__=C.value)]||vals[__+_])); </script> 自分がやったのは、prcとf=の部分を2回記述したのと、prcを2回記述して、f=(,l=Math.floor())=>D.textContent=l?prc[len.findIndex(=>>l)]+f=(,l=Math.floor())=>D.textContent=l?prc[len.findIndex(=>>l)]+'円':'';、 そして、同じくprcは2回記述しますが、f=の部分を省いたバージョンのを書きましたが、ことごとくエラー!!!になりました。 運賃と定期(運賃)を分割して表示したいです。 jsの部分を省略せずにお書きください。 構文だけをお書きになった場合、その構文をどこに入れたらいいのかや、追加の構文が必要であったりするのです。 僕にはその辺の想像力が欠如しています。

  • 運賃計算のプログラムを作っています。

    運賃検索のプログラムを作っています。例えば、中百舌鳥駅と深井駅を選択の順番を入れ替えても結果を同じにしたいです。 独自調査の結果、文字でやるより、数字でやったほうがsort関数が機能して、小さいもの順になって、挙動を同じにしやすいということが分かったので、文字→数字に変更しました。 そのsort関数を使った場合、 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])); この挙動が動くようにしていただきたいです。 要するに関数を使用した後に関数を使用することはできないかということです。 それって今のプログラミングではできないのでしょうか。お力添えをいただきたいです。 それが無理なら、 const vals = { 'sb01sb02':3.7, 'nakamozuizumigaoka':7.8, 'a0b0': 1.2, 'a0b1': 12, 'a0b2': 28.8, },の'sb1sb2':3.7,の部分で、二度書きにならないようにする方法を試したいのです。 自分は、'sb01sb02'&'sb02sb01'や、&を二度書き連ねた方法、=をつなげた方法、二度書き連ねた方法などやってみましたが駄目でした。 も泣き寝入りです。 <!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 = { 'sb1sb2':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> 例えば起点駅を0として、ほかの駅に数字を張っておくとか、中百舌鳥~深井間をifで、最初に距離を与えておくとかいらないです。

  • セレクトボックスで、逆順に選択しても同じにしたい

    タイトルが意味不明ですが、要するに、 1つ目の選択肢に、中百舌鳥、深井、泉ケ丘、栂・美木多、光明池とあります。 2つ目の選択肢にも、同じように、中百舌鳥、深井、泉ケ丘、栂・美木多、光明池とあります。 これを、例えば、選択肢1で中百舌鳥、2で深井を選択したときと、逆の場合、 選択肢1で深井、2で中百舌鳥を選んだ場合とで、挙動が同じになるようにしたいです。 ちなみに結果は、190円と返ってきます。 どのようにしたらいいですか。 jsの部分は抜かさず記述してください。 以下はその文です。 <!DOCTYPE html> <meta charset="utf-8"> <title></title> <style> </style> <body> <p id=A> <select id=B> <option value="">-- <option value="nakamozu">中百舌鳥 <option value="fukai">深井 <option value="izumigaoka">泉ケ丘 <option value="togamikita">栂・美木多 <option value="komyoike">光明池 <option value="a0">a0 <option value="a1">a1 <option value="a2">a2 </select> <select id=C> <option value="">-- <option value="nakamozu">中百舌鳥 <option value="fukai">深井 <option value="izumigaoka">泉ケ丘 <option value="togamikita">栂・美木多 <option value="komyoike">光明池 <option value="b0">b0 <option value="b1">b1 <option value="b2">b2 </select> </p> <p id=D></p> <script> const vals = { 'nakamozufukai':3.7, 'nakamozuizumigaoka':7.8, 'a0b0': 1.2, 'a0b1': 12, 'a0b2': 28.8, }, len = [ 2, 4, 6, 8, 10], prc = [170,190, 210, 230, 250], f=(_,l=Math.round(_))=>D.textContent=l?prc[len.findIndex(_=>_>l)]+'円':''; A.addEventListener('change',_=>f(vals[B.value+C.value])); </script>

  • jsで運賃計算をしてみたい。

    jsで運賃計算をしてみたいです。以下はhtml文章です。 2つ項目を選択した後、回答をしてくれるところまで段階が進んでいます。 <select name="A"> <option value="">-- <option value="a0">a0 <option value="a1">a1 <option value="a2">a2 </select> <select name="B"> <option value="">-- <option value="b0">b0 <option value="b1">b1 <option value="b2">b2 </select> <p></p> <script> const mess = { 'a0b0': 'abcdefg', 'a0b1': 'hijklmn', }; document.addEventListener ('change', ()=> { let sels = document.querySelectorAll ('select[name="A"],select[name="B"]'); let key = [...sels].map (s=> s.value).join (''); document.querySelector('p').textContent = mess[key] || ''; }); </script> さて、ここの const mess = { 'a0b0': 'abcdefg', 'a0b1': 'hijklmn', };のうち、を'a0b0': 'abcdefg',の部分を'a0b0': '28.8',と書き換えます。 このconst messの部分で、出た値を、ifで検証し、1~3kmだったら、150円、その次は、else ifで、170円、その次は、else ifで、200円みたいなことをして、値を返すようなプログラムにするには、どのようにすればいいですか。 jsの部分を残らず書いてください。書き換えてもokです。

  • jsプログラムで切り上げ参照のところで困っています

    jsの切り上げ参照のプログラムを作っています。 以下の場合、切り上げは可能ですが、切り上げの対象で、例えば、3以上の時、 3を含まずに次の段階へもっていってしまうことが問題なのです。 つまり、以上未満の計算方法になってしまっています。 これを以上以下の計算にするにはどうしたらいいですか。 f=(_,l=Math.ceil(_))=>D.textContent=l?prc[len.findIndex(_=>_>l)]+'円':''; A.addEventListener('change',_=>f(vals[(_=B.value)+(__=C.value)]||vals[__+_]));

  • if文について

    if文を利用してリストの表示をしようとしています。 ドロップダウンリストは <SELECT name="type"> <OPTION value="all">指定しない </OPTION> <OPTION value="1">タイプA系列</OPTION> <OPTION value="2">タイプB系列</OPTION> となっています。 データはチェックボックスで1か空白で保存されていて、A系列は「s_1」「s_2」、B系列は「s_3」「s_4」「s_5」にチェックが入っているかどうかを振り分けしたいんです。 なので、ドロップダウンリストで「タイプA系列」を選択したら「s_1」「s_2」に1が入っている物のみ表示するというものです。 現在のところこの形です。 if ($FORM{'type'} ne 'all') { if ($FORM{'type'} eq '1'){ if ($s_7 || $s_8 eq 1) { ; } else { next; } }else{ if ($s_9 || $s_10 || $s_11 eq 1) { ; } else { next; } } } このようにやってみましたが全部表示されてしまいます。 どのように直したらOKでしょうか? お願いします。

    • ベストアンサー
    • Perl
  • 鉄道運賃に関して

    鉄道運賃に関して 定期券の区間A→Bより外の駅Cで下車をする場合、追加運賃はどのようになるのでしょうか? A→BとA→Cの差額?それとも初乗り含むB→C?

  • JRの運賃について

    いくつかJRの定期券のことで教えて下さい。 普段、電車もバスも乗った事のない家内が、JR東海道本線の大高駅~笠寺駅までの通勤をすることになりました。 乗り方は分かりましたが、定期の買い方も使い方もイマイチ分かりません。 運賃は大高~笠寺で 180円 定期券は3ヶ月で  15,270円 職場が笠寺駅の近くで、勤務日数は月に21日程度。 月に一、二度、私用で笠寺の次の熱田駅にも行くことがあるので定期券は大高~熱田間の購入考えています。 運賃は大高~熱田で190円 定期券は3ヶ月で16,160円 このような通勤駅以外の買い方は違法になるのでしょうか? それから、もう少し安くする方法は無いのでしょうか? 回数券やプリペイドカードのような物とか・・・ あと、家内が購入した定期券を私が使用することはできますか? 私も家内も公共交通に関しては全くの無知ですので、どうかご教授をお願いします。

  • JR西日本には小児運賃の通勤定期は無いのでしょうか。

    JR西日本には小児運賃の通勤定期は無いのでしょうか。 小6の子供が通塾(三田-宝塚)するため購入しようと思っていましたが、 私鉄では存在する小児通勤定期がJR西日本には無いらしいと聞きました。 通塾目的での通学定期はできませんし、回数券で行くしかないでしょうか。 何とかお得な方法は無いのかと思い、相談させていただきます。