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

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

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

4回答

11066閲覧

formのradioボタンで値を2つ取ることはできますか?

MeB

総合スコア104

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2018/07/24 08:23

編集2018/07/24 08:41

前提・実現したいこと

htmlのformで1つのradioボタンから2つの値を取得したいです。

該当のソースコード

html

1 <form id="form" name="search" action=""> 2 <div class="form-list"> 3 <p></p> 4 <input type="radio" id="type01" name="type" value=""><label for="type01">◯か□</label> 5 <input type="radio" id="type02" name="type" value=""><label for="type02"></label> 6 </div> 7 <div class="form-list"> 8 <p></p> 9 <input type="radio" id="color01" name="color" value=""><label for="color01">赤以外</label> 10 <input type="radio" id="color02" name="color" value=""><label for="color02"></label> 11 </div> 12 <button class="submit" value="">条件で絞り込む</button> 13 </form>

js

1$(function () { 2 $.ajax({ 3 url: 'test.json', 4 type: "POST", 5 dataType: "json", 6 success: function(data){ 7 var dataArray = data.test; 8 $('button').on('click',function(event){ 9 event.preventDefault(); 10 11 var query = $('input:checked').map(function(){ 12 var element = ($(this).attr('name')).replace('[]',''); 13 var obj = {}; 14 obj[element] = $(this).val(); 15 return obj; 16 }).get(); 17 if(query == ''){ 18 query = outputResults(dataArray); 19 } else { 20 var _query = {}; 21 for(var i = 0; i <= 4; i++) { 22 for(var key in query[i]) { 23 _query[key] = query[i][key]; 24 } 25 } 26 query = _query; 27 } 28 var results = _.where(dataArray, query); 29 outputResults(results); 30 console.log(results); 31 32 var i = $(".button").index(this) 33 var p = $(".result").eq(i).offset().top; 34 $('html,body').animate({ scrollTop: p }, 'fast'); 35 return false; 36 }); 37 38 function outputResults(results){ 39 var html = ''; 40 41 jQuery.each(results, function() {

json

1{ 2 "test":[ 3 { 4 "type":"◯", 5 "color":"赤" 6 }, 7 { 8 "type":"◯", 9 "color":"青" 10 }, 11 { 12 "type":"□", 13 "color":"青" 14 }, 15 { 16 "type":"□", 17 "color":"緑" 18 }, 19 { 20 "type":"△", 21 "color":"緑" 22 } 23 ] 24}

上記でformからの値を取ってきてjsonの対象のキーで値が同じであればそれを表示それ以外は非表示と言うようにしています。
javascriptのライブラリ「Underscore.js」を使用しています。

試したこと

調べて見て

html

1<input type="radio" id="type01" name="type" value="◯ □"><label for="type01">◯か□</label> 2<input type="radio" id="type01" name="type" value="◯,□"><label for="type01">◯か□</label>

など試して見ましたがうまく取得できませんでした。
値が1つの場合は正常に動いています。
後々は取得できた後にさらにソートさせる予定です。

追記
jsonの中などを追記しました。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

formのradioボタンで値を2つ取ることはできますか?

辻褄の合わない事になってますね。

HTMLには◯か□というラジオボタンによる選択肢があり、
チェックを入れてvalueにが入ってて、
JSではvalueを抽出してから◯か□を取得したいと言っているわけですよね。

……まぁ、言いたい事はわかります。
真に◯か□というラジオボタンによる選択肢を作ってJSONから情報を抽出したいんですよね?
必要なのはルール決めで、そのルールに従って一貫した仕組みを構築する事です。

それでは実現してみましょうか。
例えば,(カンマ)区切りで複数選択したのと同じ状態を用意します。

HTML

1<div class="form-list"> 2 <p>形</p> 3 <input type="radio" id="type01" name="type" value="◯,□"><label for="type01">◯か□</label> 4 <input type="radio" id="type02" name="type" value="△"><label for="type02">△</label> 5</div>

String.prototype.split()を利用しましょう。
このメソッドを実行すると、文字列は配列になります。

JavaScript

1// 値がなければ空文字列にする 2var value_type = $('[name=type]:checked').val() || ''; 3 4// ◯か□選択時 5console.log(value_type.split(',')); // ["◯", "□"] 6// △選択時 7console.log(value_type.split(',')); // ["△"] 8 9var value_types = value_type.split(','); 10 11// 配列から探すならArray.includesを使う 12var results = _.chain(dataArray) 13 .filter(it => value_types.includes(it.type)) 14 .value();

【おまけ】初期値と併用

JavaScript

1var value_type = $('[name=type]:checked').val() || ''; 2 3var all_type = value_type === ""; 4var value_types = value_type.split(','); 5 6var results = _.chain(dataArray) 7 .filter(it => all_type || value_types.includes(it.type)) 8 .value();

投稿2018/07/25 10:57

編集2018/07/25 11:25
miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MeB

2018/07/25 11:22

ありがとうございます。 なにも選択をしていない時に Uncaught TypeError: Cannot read property 'split' of undefined と出るのですが、先ほど教えていただいた || を使えばよろしいのでしょうか?
miyabi-sun

2018/07/25 11:23

あー、undefinedになるんですね。 回答調整します。
miyabi-sun

2018/07/25 11:24

初期値をundefinedではなく、カラ文字列になるようにコードを調整しました。
MeB

2018/07/25 11:29

わざわざありがとうございます。 'ALL'でやってましたw 本当にありがとうございます。
guest

0

ベストアンサー

こうしてみてはどうでしょうか?

javascript

1$(function(){ 2 $('[value=check]:button').on('click',function(){ 3 var t=$(this).closest('form').find('[name=type]:checked'); 4 if(t.length>0){ 5 console.log(JSON.parse(t.val())); 6 } 7 }); 8});

HTML

1<form> 2<label><input type="radio" name="type" value="[&quot;◯&quot;,&quot;□&quot;]">◯か□</label><br> 3<label><input type="radio" name="type" value="[&quot;△&quot;]">△</label><br> 4<input type="button" value="check"> 5</form>

※ただしvalueをきっちりJSON型にしないとうまくparseできずにエラーになります

投稿2018/07/24 11:22

yambejp

総合スコア114779

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MeB

2018/07/25 00:14

いつもありがとうございます。 こちらでもうまく取得することができました!
guest

0

var values = document.getElementById('type01').value.split(',');
console.log(values); //["2", "1"]
上記で取れましたが別の問題がでてきたので、また質問するかもしれません…

投稿2018/07/24 09:10

MeB

総合スコア104

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

htmlのformで1つのradioボタンから2つの値を取得したいです。

じゃなくて、
radioボタンに複数の値をもたせられるように
自分でルールを決めて実装する
と考えましょう。

{ "test":[ { "type":"◯", "color":"赤,青" }, { "type":"□", "color":"青,緑" }, { "type":"△", "color":"緑" } ] }

な構造に自分で加工してradioボタンに割り当てるってことでいいんじゃないかと察しますが。

投稿2018/07/24 08:32

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MeB

2018/07/24 08:41

回答ありがとうございます。 radioボタンは今のままということでしょうか? また、赤のものに青、青のものに緑などはつけたくないです…すみません。 追記したのですが、後々formからの値で絞り込みをしたデータをソートさせる処理を入れるためjsonのデータを変えることはしたくないと考えています。誤字がありましたので訂正しておきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問