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

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

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

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

4回答

1903閲覧

jQueryの「||」の使い方がよくわかりません。

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

1グッド

0クリップ

投稿2018/04/06 21:38

編集2018/04/07 01:41

下のjqueryについて「★★★★」が機能しないのは、なぜでしょうか?

この星の部分は、

1つでも子にチェックがあるときに、親のエリアがクリックされたならば、そのときは子の要素を全て非表示にしたい。

という機能です。

現状はなぜか「その子は消えて、もう片方の子が表示されてしまう」という状態です。

どうやら、「||」が機能せずdisplay:none;が効かずに、.toggleだけが効いている状態のようです。

▼動くサンプル
https://jsfiddle.net/1mfv6qho/

▼そのコード

html

1<ul class="c-checklist"> 2 3 <li><input id="c-apple" type="checkbox" name="chk_fluits2"> 4 <p>2つとも表示切替</p> 5 <ul> 6 <li><input id="c-apple-1" class="check-c check-1" type="checkbox" name="chk_fluits" value="c-apple-1" target="c-apple-1"><label for="c-apple-1" class="check_label">apple1を表示切替</label></li> 7 <li><input id="c-apple-2" class="check-c check-2" type="checkbox" name="chk_fluits" value="c-apple-2" target="c-apple-2"><label for="c-apple-2" class="check_label">apple2を表示切替</label></li> 8 </ul> 9 </li> 10 11 <li><input id="c-grape" type="checkbox" name="chk_fluits2"> 12 <p>2つとも表示切替</p> 13 <ul> 14 <li><input id="c-grape-1" class="check-c check-1" type="checkbox" name="chk_fluits" value="c-grape-1" target="c-grape-1"><label for="c-grape-1" class="check_label">grape1を表示切替</label></li> 15 <li><input id="c-grape-2" class="check-c check-2" type="checkbox" name="chk_fluits" value="c-grape-2" target="c-grape-2"><label for="c-grape-2" class="check_label">grape2を表示切替</label></li> 16 </ul> 17 </li> 18 19</ul> 20 21<div class="respnce"> 22 <span class="c-apple-1 apple">apple1</span> 23 <span class="c-apple-2 apple">apple2</span> 24 <span class="c-grape-1 grape">grape1</span> 25 <span class="c-grape-2 grape">grape2</span> 26</div>

javasctip

1//////////////// 2////親子チェックの連動 3(function($){ 4 $('input[name="chk_fluits"]').on('change',function(){ 5 var p=$(this).closest('ul').closest('li').find('input[name="chk_fluits2"]'); 6 var c=$(this).closest('ul').find('input[name="chk_fluits"]'); 7 if(c.filter(':checked').length==2) p.prop('checked',true); 8 if(c.filter(':checked').length==0) p.prop('checked',false); 9 }).trigger('change'); 10 $('input[name="chk_fluits2"]').on('change',function(){ 11 $(this).siblings().find('input[name="chk_fluits"]').prop('checked',$(this).prop('checked')); 12 }).trigger('change'); 13 $('.c-checklist input[type=checkbox],.check_label').on('click',function(e){ 14 e.stopPropagation(); 15 }); 16 $('.c-checklist>li').on('click',function(e){ 17 $(this).find('[type=checkbox]').prop('checked',$(this).find('[type=checkbox]:checked').length==0?true:false); 18 }); 19})(jQuery); 20 21//////////////// 22////項目表示切替 23(function($){ 24 25 //親チェック時 26 $('.c-checklist > li').click(function(){ 27 var idp = $(this).find('input[name="chk_fluits2"]').attr('id'); 28 var id1 = $('.' + idp + '-1'); 29 var id2 = $('.' + idp + '-2'); 30 31 //子にチェックがなければ子を表示切替 32 if ($(id1).prop('checked',false) || $(id2).prop('checked',false)){ 33 $(id1).toggle() 34 .each(function(){ 35 if ($(this).css('display') == 'initial') 36 $(this).parent().prepend(this) 37 }); 38 $(id2).toggle() 39 .each(function(){ 40 if ($(this).css('display') == 'initial') 41 $(this).parent().prepend(this) 42 }); 43 } else { 44 //子にチェックがあれば子を非表示★★★★ 45 $(id1).css('display', 'none'); 46 $(id2).css('display', 'none'); 47 } 48 49 }); 50 51 //子チェック時 52 $('input[name="chk_fluits"]').change(function(event) { 53 event.preventDefault(); 54 var idc = $(this).attr('id'); 55 $('.' + idc) 56 .toggle() 57 .each(function(){ 58 if ($(this).css('display') == 'initial') 59 $(this).parent().prepend(this) 60 }); 61 }); 62 63})(jQuery); 64 65//////////////// 66////読み込み時 67(function($){ 68$(document).ready(function () { 69 $('input[name="chk_fluits"]').each(function(){ 70 if ($(this).prop("checked") == true) { 71 $( '.' + $(this).attr('id') ).css('display', 'initial'); 72 } else { 73 $( '.' + $(this).attr('id') ).css('display', 'none'); 74 } 75 }); 76}); 77})(jQuery);
HayatoKamono👍を押しています

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

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

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

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

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

defghi1977

2018/04/06 23:33

ちなみに「||」の意味は判っとるん?
退会済みユーザー

退会済みユーザー

2018/04/07 01:44 編集

「かつ」のつもりでした。なので【 if ($(id1).prop('checked',false) || $(id2).prop('checked',false))】の部分で、【もしid1にチェックがなくて、かつid2にもチェックがなければ】という条件を付けているつもりでした。(id1id2というのは2つの子チェックのことです。) そして、その条件について「else」をした「display:none;」が効かないのが不思議で、質問に至っている次第でございます。
defghi1977

2018/04/07 01:46

JavaScriptを使い始めて7ヶ月も経っているのに「||」と「&&」の区別すら付いていないとは…
退会済みユーザー

退会済みユーザー

2018/04/07 01:49 編集

ありがとうございます。「かつ」は「&」でしたね。
defghi1977

2018/04/07 01:50

もうJavaScriptの習得そのものを諦めたら如何です?もっと別の例えばCSSに集中するとか
退会済みユーザー

退会済みユーザー

2018/04/07 01:52

アドバイスありがとうございます!参考にさせて頂きます♪
defghi1977

2018/04/07 01:53

「&&」と「&」の区別もついておられんようで
退会済みユーザー

退会済みユーザー

2018/04/07 02:01 編集

あ、「&」って私が書いたのね。書き間違いでした。「&&」でした。ご指摘ありがとうございます。でも「&」いっこだけというのが存在すること知らなかったのでそれも感謝です。調べてみます。
defghi1977

2018/04/07 02:05

知識不足が問題ではないと以前申し上げたはず. あなたの学習態度に深刻な瑕疵があるがために, かように時間を掛けても一向に進展が見られないのです. ここが改まらない限り, いくら質問を連ねたところで周りを不幸にするだけです. 今一度, 基礎の基礎の基礎の基礎からやり直した上で相手の立場に立った質問がお出来になられるよう祈っております.
退会済みユーザー

退会済みユーザー

2018/04/07 02:08

知識不足が問題だと書いた私の先のコメントへのご返信ですね。余計だったので編集してしまったすみません。また丁寧なお返事を書いてくださってありがとうございます。
guest

回答4

0

ツギハギコードが進みすぎてコーディングの一貫性が失われていっているので、その辺りを整理して意味あるコードにスクラップ&ビルドするくらいの気持ちでかえていっては?
ちょこちょこ枝葉をいじっていっても本筋部分は進みません。
自己リファクタリングは技術力を見つめなおし、次の段階に進むキッカケになります。その方が着実に理解でき、しっかりとした土台の技術力が身につきます。
結果、完成が早まります。これまでの感じだと3歩進んで5歩下がってることもあるように見受けられます。

投稿2018/04/07 00:39

編集2018/04/07 00:41
m.ts10806

総合スコア80842

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

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

退会済みユーザー

退会済みユーザー

2018/04/07 09:06

同じプロジェクトに参画している他社が雇ったコーダが書いたこういうコードをメンテナンスさせられて死んだことが、ありまぁす。
m.ts10806

2018/04/07 09:09

まあ今回は自身で書かれたものなので本来は自身が一番分かってなきゃいけないものですけどね。 理解が曖昧なまま、半分も理解してない状態で来られているようなのでコード量だけ増えて何も進んでない状態から脱せてないわけですしね。
guest

0

Returns: jQuery

.prop( propertyName, value )

とありますから、$(id1).prop('checked',false) の戻り値は常にjQueryオブジェクトです。
また、

偽とみなされる (falsy) 値 (つまり、false、0、""、null、undefined および NaN) として定義されていない値はすべて、真とみなされる値になります。

Truthy - 用語集 | MDN

とありますから、jQueryオブジェクトは常に真とみなされ、

expr1 を true と見ることができる場合は、expr1 を返します。そうでない場合は、expr2 を返します。

論理演算子 - JavaScript | MDN

とありますから、$(id1).prop('checked',false) || $(idT).prop('checked',false)は常に$(id1)と評価され、常に真とみなされます。

投稿2018/04/07 00:23

Lhankor_Mhy

総合スコア36057

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

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

退会済みユーザー

退会済みユーザー

2018/04/08 04:24

色々と勘違いしていたみたいですね。次回から「 || 」を使う時に気を付けたいと思います。どうもありがとうございます。
guest

0

ベストアンサー

結局、難しいこと考えずに
チェック状態によって表示/非表示を切り替えるだけなので

lang

1//親チェック時 2$('.c-checklist > li').click(function(){ 3 const idp = $(this).find('input[name="chk_fluits2"]').attr('id') 4 const id1 = idp + '-1' 5 const id2 = idp + '-2' 6 7 $.each([id1,id2], (ix, cl) => { 8 $('.'+cl).toggle($('#'+cl).prop('checked')) 9 }) 10})

投稿2018/04/07 07:57

asm

総合スコア15147

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

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

退会済みユーザー

退会済みユーザー

2018/04/08 04:23

どうもありがとうございます。お蔭さまでできました。
guest

0

こんにちは
jqueryコード長いですね。もっと短くできると思いますよ。
例えば、
$(this)でチェックボックスのtrue,falseをチェックする → css付与で表示非表示のコントロール
親のチェックボックスのtrue,falseをチェックする → 子のチェックボックスをtrue or false にする → css付与で表示非表示のコントロールでいけるかと思います。

投稿2018/04/07 00:19

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2018/04/07 01:50 編集

こんにちは。お世話になります。はい。長いですよね。いろんな方の教えを参考に(1番上のは丸パクリですが)、なんとか自分で書いてみたコードなので、なんだか子供みたいにかわいいです。笑 なるほど。表示切替の機能というのは、クラス付与でこなすのが基本なのでしょうか。考えてまた取り組んでみます。アドバイスありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問