質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.91%

form(ラジオボタンとセレクトの連動をおこなったform)についてvalueがうまくかえってこない

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 2,165

お世話になります。formにおいて表題のような問題が起こって悩んでおります。

まずコードを下に記述させていただきます。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8" />
  <title>Document</title>
  <script languge="javascript">
function change(num){
var obj=document.getElementById('id1');
var data=new Array();
data[0]='<select name="select1"><option value="醤油ラーメン">醤油ラーメン<option value="味噌ラーメン">味噌ラーメン<option value="塩ラーメン">塩ラーメン<option value="とんこつラーメン">とんこつラーメン</select>';
data[1]='<select name="select1"><option value="もりそば">もりそば<option value="かき揚げそば">かき揚げ蕎麦<option value="カレー南蛮">カレー南蛮<option value="天ぷらそば">天ぷらそば</select>';
  data[2]='<select name="select1"><option value="チキンカレー">チキンカレー<option value="ビーフカレー">ビーフカレー<option value="ほうれん草カレー">ほうれん草カレー<option value="キーマカレー">キーマカレー</select>';
obj.innerHTML=data[num];
}
</script>
</head>
<body>
<form name="FORM1">
<input type="radio" name="radio1" value="0" id="r1" checked onclick="change(this.value)"><label for="r1">ラーメン</label>
<input type="radio" name="radio1" value="1" id="r2" onclick="change(this.value)"><label for="r2">蕎麦</label>
<input type="radio" name="radio1" value="2" id="r3" onclick="change(this.value)"><label for="r3">カレーライス</label><br>
<span id="id1">
<select name="select1">
<option value="醤油ラーメン">醤油ラーメン</option>
<option value="味噌ラーメン">味噌ラーメン</option>
<option value="塩ラーメン">塩ラーメン</option>
<option value="とんこつラーメン">とんこつラーメン</option>
</select>
</span>
<input type=submit value="send">
</form>
</body>
</html>


Web上ではうまく表現され、ラジオボタンの選択に応じたselectの連動が行われてはおりますが、メールを送信すると

<input type="radio" name="radio1" value="0"・・・


に問題があると思うのですがフォーム内容を受信すると本来ラーメン、蕎麦、カレーライスと値を返したいところが0,1.2と帰ってきます。
valueの値をラーメンなどに変える、変更したあとに

data[0]='


の0に同じラーメンなど入力するとundefineとエラーが返されます。
JavaScriptについて全く初心者なのでお恥ずかしいのですが、フォーム内容受信内容を

■メニュー 0
■コース詳細 醤油ラーメン

ではなく

■メニュー ラーメン
■コース詳細 醤油ラーメン

このように値を返すにはどのようにしたらいいのでしょうか?
初心者の為、恐れ入りますが噛み砕いてお知らせいただけますとありがたいです。
どうぞよろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+2

form でメールを送信する場合は、 yomomimi さんも薄々感じていらっしゃるとおり、valueに設定されている値が送信されます。
よって、 value を送信したい値に変更し、それでうまく動作するように js を変更してあげれば良いでしょう。

こんな感じで:

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8" />
  <title>Document</title>
  <script languge="javascript">
function change(foodKind){
var obj=document.getElementById('id1');
var data={
    'ラーメン':'<select name="select1"><option value="醤油ラーメン">醤油ラーメン<option value="味噌ラーメン">味噌ラーメン<option value="塩ラーメン">塩ラーメン<option value="とんこつラーメン">とんこつラーメン</select>',
    '蕎麦':'<select name="select1"><option value="もりそば">もりそば<option value="かき揚げそば">かき揚げ蕎麦<option value="カレー南蛮">カレー南蛮<option value="天ぷらそば">天ぷらそば</select>',
    'カレーライス':'<select name="select1"><option value="チキンカレー">チキンカレー<option value="ビーフカレー">ビーフカレー<option value="ほうれん草カレー">ほうれん草カレー<option value="キーマカレー">キーマカレー</select>'
};
obj.innerHTML=data[foodKind];
}
</script>
</head>
<body>
<form name="FORM1">
<input type="radio" name="radio1" value="ラーメン" id="r1" checked onclick="change(this.value)"><label for="r1">ラーメン</label>
<input type="radio" name="radio1" value="蕎麦" id="r2" onclick="change(this.value)"><label for="r2">蕎麦</label>
<input type="radio" name="radio1" value="カレーライス" id="r3" onclick="change(this.value)"><label for="r3">カレーライス</label><br>
<span id="id1">
<select name="select1">
<option value="醤油ラーメン">醤油ラーメン</option>
<option value="味噌ラーメン">味噌ラーメン</option>
<option value="塩ラーメン">塩ラーメン</option>
<option value="とんこつラーメン">とんこつラーメン</option>
</select>
</span>
<input type=submit value="send">
</form>
</body>
</html>

配列を連想配列に変更し、食べ物の種別をキーにしてみました。


追記です。

html を js の中の文字列に埋め込んでいるのが気に食わなかったので、改変しました↓

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8" />
  <title>Document</title>
  <script languge="javascript">
    var foodKinds = ['ラーメン', '蕎麦', 'カレーライス'];
    function change(selectedFoodKind) {
        for (var foodKind of foodKinds) {
            var targetElm = document.getElementById(foodKind);
            targetElm.disabled = selectedFoodKind !== foodKind;
            targetElm.style    = selectedFoodKind === foodKind ? "display:inline" : "display:none";
        }
    }
  </script>
</head>
<body>
<form name="FORM1">

<div>
    <input type="radio" name="radio1" value="ラーメン" id="r1" checked onclick="change(this.value)"><label for="r1">ラーメン</label>
    <input type="radio" name="radio1" value="蕎麦" id="r2" onclick="change(this.value)"><label for="r2">蕎麦</label>
    <input type="radio" name="radio1" value="カレーライス" id="r3" onclick="change(this.value)"><label for="r3">カレーライス</label><br>
</div>

<select id="ラーメン" name="select1">
    <option value="醤油ラーメン">醤油ラーメン</option>
    <option value="味噌ラーメン">味噌ラーメン</option>
    <option value="塩ラーメン">塩ラーメン</option>
    <option value="とんこつラーメン">とんこつラーメン</option>
</select>

<select id="蕎麦" name="select2" style='display:none' disabled>
    <option value="もりそば">もりそば</option>
    <option value="かき揚げそば">かき揚げ蕎麦</option>
    <option value="カレー南蛮">カレー南蛮</option>
    <option value="天ぷらそば">天ぷらそば</option>
</select>

<select id="カレーライス" name="select3" style='display:none' disabled>
    <option value="チキンカレー">チキンカレー</option>
    <option value="ビーフカレー">ビーフカレー</option>
    <option value="ほうれん草カレー">ほうれん草カレー</option>
    <option value="キーマカレー">キーマカレー</option>
</select>

<input type=submit value="send">
</form>
</body>
</html>

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/10 17:41

    ご丁寧なご回答ありがとうございます。配列やjsの詳細までお伝えいただいて感謝いたしております。ご回答を寄せていただいて「JavaScript」をしっかり勉強しようと改めて思いました。

    キャンセル

checkベストアンサー

0

これでどう?

<!DOCTYPE html><html lang="ja"><head><meta charset="UTF-8" />
    <title>Document</title>
    <script>
    function change(val){
        var num = 0;
        if ( val === '蕎麦' ) {
            num = 1;
        } else if ( val === 'カレーライス' ) {
            num = 2;
        }
        var obj=document.getElementById('id1');
        var data=new Array();
        data[0]='<select name="select1"><option value="醤油ラーメン">醤油ラーメン<option value="味噌ラーメン">味噌ラーメン<option value="塩ラーメン">塩ラーメン<option value="とんこつラーメン">とんこつラーメン</select>';
        data[1]='<select name="select1"><option value="もりそば">もりそば<option value="かき揚げそば">かき揚げ蕎麦<option value="カレー南蛮">カレー南蛮<option value="天ぷらそば">天ぷらそば</select>';
        data[2]='<select name="select1"><option value="チキンカレー">チキンカレー<option value="ビーフカレー">ビーフカレー<option value="ほうれん草カレー">ほうれん草カレー<option value="キーマカレー">キーマカレー</select>';
        obj.innerHTML=data[num];
    }
    </script>
</head><body>
<form name="FORM1">
    <input type="radio" name="radio1" value="ラーメン" id="r1" checked onclick="change(this.value)"><label for="r1">ラーメン</label>
    <input type="radio" name="radio1" value="蕎麦" id="r2" onclick="change(this.value)"><label for="r2">蕎麦</label>
    <input type="radio" name="radio1" value="カレーライス" id="r3" onclick="change(this.value)"><label for="r3">カレーライス</label>
    <br>
    <span id="id1">
        <select name="select1">
            <option value="醤油ラーメン">醤油ラーメン</option>
            <option value="味噌ラーメン">味噌ラーメン</option>
            <option value="塩ラーメン">塩ラーメン</option>
            <option value="とんこつラーメン">とんこつラーメン</option>
        </select>
    </span>
    <input type=submit value="send">
</form>
</body></html>

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/10 17:36

    ありがとうございます。フォーム送信後、値がメールに帰ってきていることが確認できました。改めてこれから勉強して行こうと思います。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.91%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る