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

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

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

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

HTML

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

2回答

1121閲覧

ラジオボタンのjs切り替えと、テーブルの連携(複数ある場合)ができません。。

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

HTML

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2017/07/21 10:10

編集2017/07/21 10:13

###■やりたいこと
複数のテーブルが、ラジオボタン選択でぞれぞれ切り替わるようにしたいです。

現状では、
➀2つとも切り替わってしまうか、
➁後半だけしか切り替わらないか、
という状態なのです。
###■➀2つとも切り替わってしまう
ご覧のように、2つのテーブルが、同じラジオボタンで切り替わってしまいます。↓
https://jsfiddle.net/q9186k1x/
上記URLでは次のように書いてあります。

HTML<div>

1<label><input type="radio" name="entryPlan" value="hoge1" checked>1だけ表示</label> 2<label><input type="radio" name="entryPlan" value="hoge2">12表示</label> 3<label><input type="radio" name="entryPlan" value="hoge3">全て表示</label> 4</div> 5<table class="pink"> 6<thead> 7<tr> 8<th style="padding: 10px;">番号</th> 9<th style="padding: 10px;" colspan="2">素材</th> 10<th style="padding: 10px;" colspan="2">飲み物</th> 11</tr> 12</thead> 13<tbody> 14<tr class="boxes japanese box-a"> 15<td>1</td> 16<td>ぶどう</td> 17<td>ぶどう</td> 18<td>ワイン</td> 19<td>ワイン</td> 20</tr> 21<tr class="boxes nonjapanese box-b"> 22<td>2</td> 23<td>ホップ</td> 24<td>ホップ</td> 25<td>ビール</td> 26<td>ビール</td> 27</tr> 28<tr class="boxes japanese box-c"> 29<td>3</td> 30<td>おこめ</td> 31<td>おこめ</td> 32<td>日本酒</td> 33<td>日本酒</td> 34</tr> 35</tbody> 36</table> 37 38 39<div> 40<label><input type="radio" name="entryPlan" value="hoge1" checked>1だけ表示</label> 41<label><input type="radio" name="entryPlan" value="hoge2">12表示</label> 42<label><input type="radio" name="entryPlan" value="hoge3">全て表示</label> 43</div> 44<table class="green"> 45<thead> 46<tr> 47<th style="padding: 10px;">番号</th> 48<th style="padding: 10px;" colspan="2">味</th> 49<th style="padding: 10px;" colspan="2">のど越し</th> 50</tr> 51</thead> 52<tbody> 53<tr class="boxes japanese box-a"> 54<td>A</td> 55<td>あまい</td> 56<td>あまい</td> 57<td>すっきり</td> 58<td>すっきり</td> 59</tr> 60<tr class="boxes nonjapanese box-b"> 61<td>B</td> 62<td>からい</td> 63<td>からい</td> 64<td>がつん</td> 65<td>がつん</td> 66</tr> 67<tr class="boxes japanese box-c"> 68<td>C</td> 69<td>にがい</td> 70<td>にがい</td> 71<td>ねっとり</td> 72<td>ねっとり</td> 73</tr> 74</tbody> 75</table> 76 77 78<script type="text/javascript"> 79window.onload = function(){ 80 entryChange(); 81 Array.prototype.map.call(document.querySelectorAll("[name=entryPlan]"),function(i){ 82 i.addEventListener('change',function(){entryChange()}); 83 }); 84} 85function entryChange(){ 86 var ele=document.querySelectorAll("[name=entryPlan]:checked"); 87 var v=ele.length>0?ele[0].value:null; 88 Array.prototype.map.call(document.querySelectorAll(".boxes"),function(i){ 89 i.classList.add('hide'); 90 if( 91 (v=='hoge1' && i.classList.contains('box-a')) || 92 (v=='hoge2' && i.classList.contains('japanese')) || 93 (v=='hoge3' && (i.classList.contains('box-a') || i.classList.contains('japanese') || i.classList.contains('nonjapanese'))) 94 ){ 95 i.classList.remove('hide'); 96 } 97 }); 98} 99</script> 100

###■➁後半だけしか切り替わらない
HTMLとjsのそれらしき部分を下記のように変えてみました。
朝から相当がんばりました。笑

2つjsを書いているのですが、2つ目の方しか機能しない様子です。
https://jsfiddle.net/q9186k1x/1/
上記URLでは次のように書いてあります。

HTML

1<div> 2<label><input type="radio" name="entryPlan-number" value="hoge1" checked>1だけ表示</label> 3<label><input type="radio" name="entryPlan-number" value="hoge2">12表示</label> 4<label><input type="radio" name="entryPlan-number" value="hoge3">全て表示</label> 5</div> 6<table class="pink"> 7<thead> 8<tr> 9<th style="padding: 10px;">number</th> 10<th style="padding: 10px;" colspan="2">素材</th> 11<th style="padding: 10px;" colspan="2">飲み物</th> 12</tr> 13</thead> 14<tbody> 15<tr class="boxes box-japanese-number box-number-1"> 16<td>1</td> 17<td>ぶどう</td> 18<td>ぶどう</td> 19<td>ワイン</td> 20<td>ワイン</td> 21</tr> 22<tr class="boxes box-japanese-number box-number-2"> 23<td>2</td> 24<td>ホップ</td> 25<td>ホップ</td> 26<td>ビール</td> 27<td>ビール</td> 28</tr> 29<tr class="boxes box-nonjapanese-number box-number-3"> 30<td>3</td> 31<td>おこめ</td> 32<td>おこめ</td> 33<td>日本酒</td> 34<td>日本酒</td> 35</tr> 36</tbody> 37</table> 38 39 40<div> 41<label><input type="radio" name="entryPlan-alphabet" value="hoge4" checked>Aだけ表示</label> 42<label><input type="radio" name="entryPlan-alphabet" value="hoge5">AB表示</label> 43<label><input type="radio" name="entryPlan-alphabet" value="hoge6">全て表示</label> 44</div> 45<table class="green"> 46<thead> 47<tr> 48<th style="padding: 10px;">alphabet</th> 49<th style="padding: 10px;" colspan="2">味</th> 50<th style="padding: 10px;" colspan="2">のど越し</th> 51</tr> 52</thead> 53<tbody> 54<tr class="boxes box-japanese-alphabet box-alphabet-a"> 55<td>A</td> 56<td>あまい</td> 57<td>あまい</td> 58<td>すっきり</td> 59<td>すっきり</td> 60</tr> 61<tr class="boxes box-japanese-alphabet box-alphabet-b"> 62<td>B</td> 63<td>からい</td> 64<td>からい</td> 65<td>がつん</td> 66<td>がつん</td> 67</tr> 68<tr class="boxes box-nonjapanese-alphabet box-alphabet-c"> 69<td>C</td> 70<td>にがい</td> 71<td>にがい</td> 72<td>ねっとり</td> 73<td>ねっとり</td> 74</tr> 75</tbody> 76</table> 77 78 79<script type="text/javascript"> 80window.onload = function(){ 81 entryChange(); 82 Array.prototype.map.call(document.querySelectorAll("[name=entryPlan-number]"),function(i){ 83 i.addEventListener('change',function(){entryChange()}); 84 }); 85} 86function entryChange(){ 87 var ele=document.querySelectorAll("[name=entryPlan-number]:checked"); 88 var v=ele.length>0?ele[0].value:null; 89 Array.prototype.map.call(document.querySelectorAll(".boxes"),function(i){ 90 i.classList.add('hide'); 91 if( 92 (v=='hoge1' && i.classList.contains('box-number-a')) || 93 (v=='hoge2' && i.classList.contains('box-japanese')) || 94 (v=='hoge3' && (i.classList.contains('box-number-a') || i.classList.contains('box-japanese-number') || i.classList.contains('box-nonjapanese-number'))) 95 ){ 96 i.classList.remove('hide'); 97 } 98 }); 99} 100</script> 101 102<script type="text/javascript"> 103window.onload = function(){ 104 entryChange(); 105 Array.prototype.map.call(document.querySelectorAll("[name=entryPlan-alphabet]"),function(i){ 106 i.addEventListener('change',function(){entryChange()}); 107 }); 108} 109function entryChange(){ 110 var ele=document.querySelectorAll("[name=entryPlan-alphabet]:checked"); 111 var v=ele.length>0?ele[0].value:null; 112 Array.prototype.map.call(document.querySelectorAll(".boxes"),function(i){ 113 i.classList.add('hide'); 114 if( 115 (v=='hoge4' && i.classList.contains('box-alphabet-a')) || 116 (v=='hoge5' && i.classList.contains('box-japanese-alphabet')) || 117 (v=='hoge6' && (i.classList.contains('box-alphabet-1') || i.classList.contains('box-japanese-alphabet') || i.classList.contains('box-nonjapanese-alphabet'))) 118 ){ 119 i.classList.remove('hide'); 120 } 121 }); 122} 123</script>

jsが悪いのかHTMLが悪いのか、もうわかりません!泣
どなたかお助けください。よろしくお願い致します。<(_ _)>

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

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

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

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

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

guest

回答2

0

別質問でたてたのですね。前回の質問に追記しときました

投稿2017/07/21 12:14

yambejp

総合スコア114769

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

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

0

  1. tableとinputの入ったdivを同じdivで囲う
  2. querySelectorAllの起点をその要素にする

で区別できるのでは。

投稿2017/07/21 10:17

kei344

総合スコア69398

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

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

退会済みユーザー

退会済みユーザー

2017/07/21 10:34

sono1とsono2でくくる。というのはわかったのですが、たぶん次が理解できてないかもしれません。 このようになってしまいました…?? https://jsfiddle.net/ow1c2z5x/ 「起点を要素にする」というのは、このような意味ではないのでしょうか?
kei344

2017/07/21 10:45

たとえば、document.querySelector(".sono2").querySelectorAll('.green') でテーブルが取得できます。document.querySelectorは全体から探索するのに対し、element.querySelectorはそのノード以下について探索します。 というかjQueryでも使いましょう。そのほうが簡単ですよ。
退会済みユーザー

退会済みユーザー

2017/07/21 11:27

たびたびすみません。むむ~。たとえばsono1とpinkだけそのように書いてみたのですが、ラジオ選択しても反応してくれないご様子です。。 https://jsfiddle.net/qa8upomv/ もちろんsono2とgreenも同様に反応ナシです。 https://jsfiddle.net/qa8upomv/1/ 書く場所は3か所であっていますよね??
kei344

2017/07/21 12:40

使い方が違います。console.logでdocument.querySelector(".sono1").elementが有るかどうか確認してみてください。 例示方法が悪かったですね、elementはDOMのElementのつもりで書いたのです。 【Element - Web API インターフェイス | MDN】 https://developer.mozilla.org/ja/docs/Web/API/Element <div id="sono" class="sono1"><div class="pink"></div></div> var eleId = document.getElementById('sono'); // sonoというIDの要素を取得 var eleClass = document.querySelector(".sono1"); // sono1というクラスの要素を取得 eleId.querySelector(".pink"); // ↓同じ要素を指している eleClass .querySelector(".pink"); // ↑同じ要素を指している 良い例が思いつきません。
退会済みユーザー

退会済みユーザー

2017/07/21 14:05

むずかしくてギブアップの巻でした。笑 いつもありがとうございます。
退会済みユーザー

退会済みユーザー

2017/07/21 14:54

ご指摘ありがとうです。そちらのご回答は私のwordpressテーマでは適用できませんでした。なので、もうちょっとこちらの質問を放置しておいて、私のテーマでも適用できそうなご回答がポンと出て来たらいいな。なんてたくらんでいます。「解決」の意味するところがビミョーなところですね(*_*;
退会済みユーザー

退会済みユーザー

2017/07/21 14:57

そちらのご回答では「テーブルを<form>でくくる」という方法でした。そしてこちらでkei344さんから頂戴したご回答は別の方法(難しそうで断念)。なので、なんかもっと他の方法が出て来ないかな。と。笑
kei344

2017/07/21 15:04

> 質問を放置しておいて・・・ それは失礼しました。WordPressで動かないなら多くの場合、エラーが発生していると思われます。それを解決するほうが早いかもしれませんよ。 ギブアップされたようなので補足もコメントもしませんが、jQueryを使うほうが確実に簡単です。
退会済みユーザー

退会済みユーザー

2017/07/21 15:22

いいえ、いつもご指摘感謝していますよ♪ エラー解決は ステップの基本がわからず、とりあずwordpressの当該テーマのjsフォルダを削除してみたり、あとはjs整形サイトでちょっと変えて書き直してみたりしたのですが、ダメでした。 jqueryは 過去に何度もwordpressに実装しようとして、完全にあきらめちゃってるのです(笑)。 jsなら投稿画面とheaderに書くだけで楽ちんなのです。 しばらくしたらもう少し質問をシンプルにしてもう一度投稿してみようと思います。それではよい週末を。
退会済みユーザー

退会済みユーザー

2017/07/21 15:26

いまwordpressサポートの会社さん宛てにメール打ってるのですが、kei344さん、ビットコイン3000円分お送りするので解決してくださいませんか?wお立場もあるでしょうけれど…笑
退会済みユーザー

退会済みユーザー

2017/07/21 15:38

もちろん前金でございます。(3000円でえらそーにw)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問