
下記のように、select要素を2つ用意し、果物か魚を撰択すると、それに応じた2番目のselect要素が表示されるようなコードを作りました。
見た目の問題はないのですが、1つ目で魚を撰択し、あじやさんまを撰択しても、最終的にフォームが送信される時には
果物のvalueが参照されてしまいます。
jqueryのhiddenで隠しているだけなので、果物用のselect要素が裏に潜んでいるためにこういった結果になっているかと思うのですが
この問題を解決するためにはどうしたらよいのでしょうか。
<form id="test">
<select id="type">
<option value="fruit">果物</option>
<option value="fish">魚</option>
</select>
<select name="sample" id="fruit">
<option value="apple">りんご</option>
<option value="orange">おれんじ</option>
</select>
<select name="sample" id="fish">
<option value="aji">あじ</option>
<option value="sanma">さんま</option>
</select>
<input type="submit" >
</form>
// はじめは全て隠しておく
$('#fruit').hide();
$('#fish').hide();
$('#type').change(function(){
var type = $(this).val();
if (type == 'fruit') {
$('#fruit').show();
$('#fish').hide();
} else {
$('#fruit').hide();
$('#fish').show();
}
});
$('form').submit(function(){
var result = $('form [name=sample]').val();
alert(result);
return false;
});
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
こんにちは。
送信前の
var result = $('form [name=sample]').val();
を
var result = $('form [name=sample]:visible').val();
に変更すると表示されている方の値を取得することが出来ますが、送信先の内容は同じく果物のほうが入っていってしまうと思います。
なので以下のようにしてみました。
動作はコメントを参考にしてみてください。
disableを付与することによりサーバ上に送信される方を制御していますのでサーバ上ではsampleを取得すればどちらかの値が入ってきます。
またはhidden要素を一つ用意してそこに
var result = $('form [name=sample]:visible').val();
の値をセットするようにすれば以下のような制御はいりません。
$().ready ( function() {
// とりあえず非表示
$('#fruit').hide();
$('#fish').hide();
$('#type').change(function(){
var type = $(this).val();
// 状態を変更する
setStatus ( 'fruit', type === 'fruit' );
setStatus ( 'fish', type === 'fish' );
});
$('form').submit(function(){
// 表示されている方のname="sample"要素を取得する
var result = $('form [name=sample]:visible').val();
alert(result);
});
function setStatus ( id, disp ) {
// 引数のidの表示状態をtrueまたはfalseで設定
var $obj = $('#'+id).toggle(disp);
if ( !disp ) {
// 非表示にした要素にdisabled属性を追加する
$obj.attr('disabled','disabled');
} else {
// 表示した要素からdisabled属性を除去する
$obj.removeAttr('disabled');
}
}
});
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
- JavaScript セレクトボックスを2つ選択してメッセージなどを表示するには。~運賃検索プログラムを完成させたい~ 1 2022/07/22 11:10
- JavaScript console.logがどうしても2つ機能しないのでアドバイスをくださいお願いします 2 2022/07/07 22:13
- JavaScript セレクトボックスで配列を呼び出したい。 1 2022/07/08 20:14
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- JavaScript セレクトを全て選択されていないと、文字によるエラーメッセージを表示させるコードを調べています 2 2023/06/22 15:48
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- JavaScript コードレビューをお願いします。 1 2022/07/16 05:38
- JavaScript プログラムがうまく動きませんレビューお願いします 1 2022/07/10 05:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プルダウン選択を変更すると、...
-
今日の日付を自動的にセレクト...
-
<input>の選択肢をプルダウンメ...
-
データベースからのarray を j...
-
JavaScripsのDOMについてなんで...
-
プルダウンのoptionの表示・非...
-
javascriptでセレクトボックス...
-
VBScriptでHTMLのセレクトボッ...
-
【javascript】連想配列からセ...
-
JSONデータをフォームにセット...
-
ラジオボタンとプルダウンを連...
-
セレクトメニューの連動について
-
selectを変更不可にしたい
-
プルダウンメニューに連動する...
-
jsでは、'で区切った部分を改行...
-
jqueryで小計値の合算が出来ま...
-
セレクトメニューの値をクッキ...
-
セレクトボックスで配列を呼び...
-
javascript:データを日本語で...
-
addclassがうまく働きません
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
<input>の選択肢をプルダウンメ...
-
プルダウン選択を変更すると、...
-
javascriptでセレクトボックス...
-
スマホのフォームでのselect複...
-
二つのセレクトボックス間での...
-
全てのselect要素をデフォルト...
-
同じ名前のセレクトがある場合...
-
JavaScriptで<select>の<option...
-
ラジオボタンの値が取得できな...
-
<select> をmultiple にしてい...
-
Selectボックスの一覧表示方法
-
プルダウンの値によって活性・...
-
selectで選ばれた値を別ページ...
-
プルダウンのoptionの表示・非...
-
【JavaScript】プルダウンで数...
-
Selectボックスの要素入力を省...
-
javascriptでセルを矩形で選択する
-
セレクトボックスを2つ選択して...
-
return falseが効かない
-
IDをvalueの値でなく、class名...
おすすめ情報