sembokulove
@sembokulove (Missing place)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

例えばa01とa02を選択した際に、フォーム欄1にa01とa02が選択されています、 と、フォーム欄2にりんごと表示されるようにしたいです。

解決したいこと

例えばa01とa02を選択した際に、フォーム欄1にa01とa02が選択されています、
と、フォーム欄2にりんごと表示されるようにしたいです。

発生している問題・エラー

実装上フォーム欄2の内容しか表示されないです。

例)

同上

または、問題・エラーが起きている画像をここにドラッグアンドドロップ

該当するソースコード

<style>
textarea.hoge { width: 150px; height:200px;}
</style>
<body>
<form name="semboku_f">
出発駅は 
<select name="semboku_q1">
<option>選択肢</option>
<option>a01</option>
<option>a02</option>
<option>a03</option>
<option>b01</option>
<option>b02</option>
<option>b03</option>
</select>0
です。
<p>
到着駅は 
<select name="semboku_q2">
<option>選択肢</option>
<option>a01</option>
<option>a02</option>
<option>a03</option>
<option>b01</option>
<option>b02</option>
<option>b03</option>
</select></select>0
です。<p>
<input id="result11" type="text11" value="" size="30">
<input id="result21" type="text21" value="" size="30">
<input type="reset" value="リセット"></p>
<input type="button" name="b1" value="運賃検索" onclick="semboku_kotae()"> <p></input>
<table border="1">
<input name=semboku_tokuten id="semboku_tokuten_2" size="6" type="hidden">km</input></th></tr>
</table>00
<!--HTMLここまで-->
<!--問題-->
<hr />
<hr />
<hr />
</body>
 
<script>
(function(){

    const form = document.semboku_f;  //フォーム要素

    form.onchange = function(){
      //インデックスを取得
      const i11 = form.semboku_q1.selectedIndex;
      const i12 = form.semboku_q2.selectedIndex;

      //禁止条件
      if ( i11==0 || i12==0) {
          return false;
      }

      //テキストを取得
      const text11 = form.semboku_q1.options[i11].text;
      const text12 = form.semboku_q2.options[i12].text;

      let str = text11 + " と " + text12 + " が選択されています。";

      if (i11==i12) {
          str ="異なる記号を選んでください。";
      }

      form.result11.value = str;  //結果を表示
    };

})();
</script>
<script>
(function(){

    const form = document.semboku_f;  //フォーム要素

    form.onchange = function(){
      //インデックスを取得
      const i21 = form.semboku_q1.selectedIndex;
      const i22 = form.semboku_q2.selectedIndex;

      //禁止条件
      if ( i21==0 || i22==0) {
          return false;
      }

      //テキストを取得
      const text21 = form.semboku_q1.options[i21].text;
      const text22 = form.semboku_q2.options[i22].text;

      let str = text21 + " から " + text22 + " まで";

      if (i21==i22) {
          str ="異なる記号を選んでください";
      }
      else if ((semboku_f.semboku_q1.value=="a01" && semboku_f.semboku_q2.value=="a02")
   || (semboku_f.semboku_q1.value=="a02" && semboku_f.semboku_q2.value=="a0100")) {
          str ="りんご";
      }

      form.result21.value = str;  //結果を表示
    };

})();
</script>

const i11やi11、result11というように、
番号で区分けしました。
しかし、それでもうまくいかないので困っています。

0

2Answer

html ソースも提示してください。

【追伸】

質問者さんの過去スレッド見たけどひどすぎ。

1Like

問題点が複数あります。

  1. document.semboku_f.onchangeが2つ目で上書きされているため、前に定義されているスクリプトが実行されない
  2. 閉じられていないタグがある
  3. 変数名がわかりにくい
  4. name属性がコーテーションで囲われていない場所がある

ここでは、質問の根幹となる1の問題だけ解決方法を示します。
あとから出てきた方のScriptタグに以下の修正を行います。
一つ目のScriptタグは削除して問題ありません。

<script>
  (function () {

    const form = document.semboku_f;  //フォーム要素

    form.onchange = function () {
      //インデックスを取得
      const i21 = form.semboku_q1.selectedIndex;
      const i22 = form.semboku_q2.selectedIndex;

      //禁止条件
      if (i21 == 0 || i22 == 0) {
        return false;
      }

      //テキストを取得
      const text21 = form.semboku_q1.options[i21].text;
      const text22 = form.semboku_q2.options[i22].text;

      let str = text21 + " から " + text22 + " まで";
+     form.result11.value = str;
      if (i21 == i22) {
        str = "異なる記号を選んでください";
      }
      else if ((semboku_f.semboku_q1.value == "a01" && semboku_f.semboku_q2.value == "a02")
        || (semboku_f.semboku_q1.value == "a02" && semboku_f.semboku_q2.value == "a0100")) {
        str = "りんご";
      }

      form.result21.value = str;  //結果を表示
    };

  })();
</script>

0Like

Comments

  1. @sembokulove

    Questioner

    詳しくご教授いただきありがとうございます。
    ただ、いかんせん外部にしないと可読性が下がってしまうので、
    以下の部分を外部ファイルに移行しました、
    ですが、外部ファイルに移行したとたん、リンクはあっているのですが、
    要素を取得しなくなりました。なぜでしょうか?
    もしかして、埋め込み式と外部式では書き方が別でしょうか?

     (function () {
    
        const form = document.semboku_f;  //フォーム要素
    
        form.onchange = function () {
          //インデックスを取得
          const i21 = form.semboku_q1.selectedIndex;
          const i22 = form.semboku_q2.selectedIndex;
    
          //禁止条件
          if (i21 == 0 || i22 == 0) {
            return false;
          }
    
          //テキストを取得
          const text21 = form.semboku_q1.options[i21].text;
          const text22 = form.semboku_q2.options[i22].text;
    
          let str = text21 + " から " + text22 + " まで";
          form.result11.value = str;
          if (i21 == i22) {
            str = "異なる記号を選んでください";
          }
          else if ((semboku_f.semboku_q1.value == "中百舌鳥" && semboku_f.semboku_q2.value == "深井")
            || (semboku_f.semboku_q1.value == "深井" && semboku_f.semboku_q2.value == "中百舌鳥")) {
            str = "3.7km";
          }
          else if ((semboku_f.semboku_q1.value == "中百舌鳥" && semboku_f.semboku_q2.value == "泉ケ丘")
            || (semboku_f.semboku_q1.value == "泉ケ丘" && semboku_f.semboku_q2.value == "中百舌鳥")) {
            str = "7.8㎞";
          }
          else if ((semboku_f.semboku_q1.value == "中百舌鳥" && semboku_f.semboku_q2.value == "栂・美木多")
            || (semboku_f.semboku_q1.value == "栂・美木多" && semboku_f.semboku_q2.value == "中百舌鳥")) {
            str = "10.2㎞";
          }
          else if ((semboku_f.semboku_q1.value == "中百舌鳥" && semboku_f.semboku_q2.value == "光明池")
            || (semboku_f.semboku_q1.value == "光明池" && semboku_f.semboku_q2.value == "中百舌鳥")) {
            str = "12.1㎞";
          }
          else if ((semboku_f.semboku_q1.value == "中百舌鳥" && semboku_f.semboku_q2.value == "和泉中央")
            || (semboku_f.semboku_q1.value == "和泉中央" && semboku_f.semboku_q2.value == "中百舌鳥")) {
            str = "14.3㎞";
          }
          else if ((semboku_f.semboku_q1.value == "深井" && semboku_f.semboku_q2.value == "泉ケ丘")
            || (semboku_f.semboku_q1.value == "泉ケ丘" && semboku_f.semboku_q2.value == "深井")) {
            str = "4.1㎞";
          }
          else if ((semboku_f.semboku_q1.value == "深井" && semboku_f.semboku_q2.value == "栂・美木多")
            || (semboku_f.semboku_q1.value == "栂・美木多" && semboku_f.semboku_q2.value == "深井")) {
            str = "6.5㎞";
          }
          else if ((semboku_f.semboku_q1.value == "深井" && semboku_f.semboku_q2.value == "光明池")
            || (semboku_f.semboku_q1.value == "光明池" && semboku_f.semboku_q2.value == "深井")) {
            str = "8.4㎞";
          }
          else if ((semboku_f.semboku_q1.value == "深井" && semboku_f.semboku_q2.value == "和泉中央")
            || (semboku_f.semboku_q1.value == "和泉中央" && semboku_f.semboku_q2.value == "深井")) {
            str = "10.6㎞";
          }
          else if ((semboku_f.semboku_q1.value == "泉ケ丘" && semboku_f.semboku_q2.value == "栂・美木多")
            || (semboku_f.semboku_q1.value == "栂・美木多" && semboku_f.semboku_q2.value == "泉ケ丘")) {
            str = "2.4㎞";
          }
          else if ((semboku_f.semboku_q1.value == "泉ケ丘" && semboku_f.semboku_q2.value == "光明池")
            || (semboku_f.semboku_q1.value == "光明池" && semboku_f.semboku_q2.value == "泉ケ丘")) {
            str = "4.3㎞";
          }
          else if ((semboku_f.semboku_q1.value == "泉ケ丘" && semboku_f.semboku_q2.value == "和泉中央")
            || (semboku_f.semboku_q1.value == "和泉中央" && semboku_f.semboku_q2.value == "泉ケ丘")) {
            str = "6.5㎞";
          }
          else if ((semboku_f.semboku_q1.value == "栂・美木多" && semboku_f.semboku_q2.value == "光明池")
            || (semboku_f.semboku_q1.value == "光明池" && semboku_f.semboku_q2.value == "栂・美木多")) {
            str = "1.9㎞";
          }
          else if ((semboku_f.semboku_q1.value == "栂・美木多" && semboku_f.semboku_q2.value == "和泉中央")
            || (semboku_f.semboku_q1.value == "和泉中央" && semboku_f.semboku_q2.value == "栂・美木多")) {
            str = "4.1㎞";
          }
          else if ((semboku_f.semboku_q1.value == "光明池" && semboku_f.semboku_q2.value == "和泉中央")
            || (semboku_f.semboku_q1.value == "和泉中央" && semboku_f.semboku_q2.value == "光明池")) {
            str = "2.2㎞";
          }
          form.result21.value = str;  //結果を表示
        };
    
      })();
    

    ちなみに元ファイルはこちらです。

    <style>
    textarea.hoge { width: 150px; height:200px;}
    </style>
    <body>
    <form name="semboku_f">
    出発駅は 
    <select name="semboku_q1">
    <option>選択肢</option>
    <option>a01</option>
    <option>a02</option>
    <option>a03</option>
    <option>b01</option>
    <option>b02</option>
    <option>b03</option>
    </select>0
    です。
    <p>
    到着駅は 
    <select name="semboku_q2">
    <option>選択肢</option>
    <option>a01</option>
    <option>a02</option>
    <option>a03</option>
    <option>b01</option>
    <option>b02</option>
    <option>b03</option>
    </select></select>0
    です。<p>
    <input id="result11" type="text11" value="" size="30">
    <input id="result21" type="text21" value="" size="30">
    <input type="reset" value="リセット"></p>
    <input type="button" name="b1" value="運賃検索" onclick="semboku_kotae()"> <p></input>
    <table border="1">
    <input name=semboku_tokuten id="semboku_tokuten_2" size="6" type="hidden">km</input></th></tr>
    </table>00
    <!--HTMLここまで-->
    <!--問題-->
    <hr />
    <hr />
    <hr />
    </body>
    

Your answer might help someone💌