🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

checkbox

checkboxは、GUIのエレメントです。また、HTML<input>タグのtype属性で扱われる値を指します。

JavaScript

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

jQuery

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

CSS

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

Q&A

解決済

2回答

637閲覧

特定要素に特定クラスがついている場合のみチェックボックスにcheckedを付与したい

crigw

総合スコア24

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

checkbox

checkboxは、GUIのエレメントです。また、HTML<input>タグのtype属性で扱われる値を指します。

JavaScript

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

jQuery

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

CSS

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

1グッド

0クリップ

投稿2019/11/27 06:36

編集2019/11/27 07:13

###やりたいこと
サイトメニューにて、input, label, CSSで制御しているアコーディオンメニューを作っています。
カレントページを表示中の時に、該当するメニューにclass="current"の付与を与えることに成功したのですが、class="current"がついている時には該当のチェックボックス <input id="accSP-subOpen-home" class="acc-subOpen" type="checkbox">checkedを付与してアコーディオンを最初から開いた状態にしたいのですが、自分の記述ではなんの変化もなく、checkedは付与さえません。

###コード一覧

html

1<div id="mainNavBox"> 2<ul class="contents"> 3 <li class="item"> 4 <input id="accSP-subOpen-home" class="acc-subOpen" type="checkbox"> 5 <label class="acc-unshown" for="accSP-subOpen-home">Home</label> 6 <ul class="subNav"> 7 <li><a href="top.html">トップページ</a></li> 8 <li><a href="news.html">お知らせ一覧</a></li> 9 <li><a href="release.html">リリースノート一覧</a></li> 10 </ul> 11 </li> 12 <li class="item"> 13 <input id="accSP-subOpen-home" class="acc-subOpen" type="checkbox"> 14 <label class="acc-unshown" for="accSP-subOpen-home">マイページ</label> 15 <ul class="subNav"> 16 <li><a href="profile.html">プロフィール</a></li> 17 <li><a href="keiyaku.html">契約状況</a></li> 18 </ul> 19 </li> 20</ul> 21</div>

css

1.mainNavBox { 2 background-color: #23282d; 3 position: fixed; 4 max-width: 200px; 5 width: 100%; 6 height: 100%; 7} 8.mainNavBox ul.contents { margin: 12px 0; } 9.mainNavBox ul.contents>li.item { 10 min-height: 34px; 11 position: relative; 12} 13.mainNavBox ul.contents>li.item>a, 14.mainNavBox ul.contents>li.item>label, 15.mainNavBox ul.contents>li.item>ul.subNav>li>a { 16 cursor: pointer; 17 color: #eee; 18 display: block; 19 font-size: 1.4rem; 20 line-height: 1.3; 21 padding: 9px 15px; 22} 23 .mainNavBox ul.contents>li.item>a:hover, 24 .mainNavBox ul.contents>li.item>label:hover, 25 .mainNavBox ul.contents>li.current>a, 26 .mainNavBox ul.contents>li.current>label { background-color: #fd8a39; } 27 28/*=============== ul.subNab/// accordion ===============*/ 29.mainNavBox ul.contents>li.item>input.acc-subOpen { display: none; } 30.mainNavBox ul.contents>li.item>label.acc-unshown { 31 display: block; 32 margin-bottom: 1px; 33} 34.mainNavBox ul.contents>li.item>ul.subNav { 35 height: 0; 36 opacity: 0; 37 visibility: hidden; 38} 39.mainNavBox ul.contents>li.item>ul.subNav>li {} 40.mainNavBox ul.contents>li.item>ul.subNav>li>a { 41 color: rgba(240,245,250,.7); 42 font-size: 1.3rem; 43 line-height: 1.4; 44 padding: 6px 12px; 45} 46 .mainNavBox ul.contents>li.item>ul.subNav>li>a:hover { color: #fd8a39; } 47 .mainNavBox ul.contents>li.item>ul.subNav>li.current>a { color: #fff; } 48 49.mainNavBox ul.contents>li.item>input.acc-subOpen:checked + label.acc-unshown + ul.subNav { 50 background-color: #32373c; 51 height: auto; 52 opacity: 1; 53 padding: 7px 0 8px; 54 visibility: visible; 55} 56/*---------- accordion/// icon ----------*/ 57.mainNavBox ul.contents>li.item>label.acc-unshown::after { 58 display: block; 59 line-height: 2; 60 height: 34px; 61 width: 34px; 62 top: 0; 63 right: 0; 64 position: absolute; 65 -webkit-transition: all 0.35s; 66 transition: all 0.35s; 67 text-align: center; 68} 69.mainNavBox ul.contents>li.item>input.acc-subOpen[type=checkbox] + label::after { 70 content: '+'; 71} 72.mainNavBox ul.contents>li.item>input.acc-subOpen[type=checkbox]:checked + label::after { 73 transform: rotate(315deg); 74}

js

1//メニュー現在地点の設定 2$(function(){ 3 $('.mainNavBox ul li a').each(function(){ 4 var $href = $(this).attr('href'); 5 if(location.href.match($href)) { 6 $(this).parent().addClass('current'); 7 $(this).parent().parent().parent().addClass('current'); 8 } else { 9 $(this).parent().removeClass('current'); 10 } 11 }); 12});

###やってみたこと
以下、いろいろ調べたものを記述したのですがjQueryへの知識が浅いため見当違いなことをしているのかもしれません。

js

1//current-open 2$(function(){ 3 $('.acc-subOpen').change(function() { 4 if ($('li.current').prop("checked")) { 5 $('li.current').prop("checked", true); 6 } else { 7 $('li.current').prop("checked", false); 8 } 9 }); 10});

###見た目
現在
イメージ説明
目標
イメージ説明
以下、クラス名が付与されている様子

css

1<div id="mainNavBox"> 2<ul class="contents"> 3 <li class="item current"> 4 <input id="acc-subOpen-home" class="acc-subOpen" type="checkbox"> 5 <label class="acc-unshown" for="acc-subOpen-home">Home</label> 6 <ul class="subNav"> 7 <li class="current"><a href="./top.html">トップページ</a></li> 8 <li><a href="#">お知らせ一覧</a></li> 9 <li><a href="#">リリースノート一覧</a></li> 10 </ul> 11 </li> 12 <li class="item"> 13 <input id="accSP-subOpen-home" class="acc-subOpen" type="checkbox"> 14 <label class="acc-unshown" for="accSP-subOpen-home">マイページ</label> 15 <ul class="subNav"> 16 <li><a href="profile.html">プロフィール</a></li> 17 <li><a href="keiyaku.html">契約状況</a></li> 18 </ul> 19 </li> 20</ul> 21</div>
退会済みユーザー👍を押しています

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

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

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

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

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

m.ts10806

2019/11/27 06:44

うまくいかない、とは?
azuapricot

2019/11/27 06:47

付与ができたならチェックボックスに .prop("checked", true) を設定することもできるのでは?と思うのですが違うのでしょうか
azuapricot

2019/11/27 06:50

あと .parent().parent().parent() この書き方自分でもどこに設定したのかわからなくなっちゃうので .parents("クラス名") とかにした方がいいきがします
azuapricot

2019/11/27 06:55

.parent().parent().parent() → <li class="item current"> このli要素を基準にして→ find(".acc-subOpen").prop("checked", true) とか?(動作確認はしてませんが)
yambejp

2019/11/27 07:14

トリガーはなにを想定しているのですか? ・htmlがロードされたときだけでよい? ・なにかによってclassが動的に変わる可能性がある?
crigw

2019/11/27 07:14

>m.ts10806さん 言葉足らずで申し訳ございません。自分の記述ではcheckedが付与されないということです。
crigw

2019/11/27 07:17

>azuapricotさん .parents("クラス名")にした時、うまくいかなかったのでよくわからず暫定的に繰り返し記述にしてました。 find(".acc-subOpen").prop("checked", true) についてはどこに記述すればいいのでしょうか。
crigw

2019/11/27 07:18 編集

>yambejpさん 現時点では、HTMLがロードされた時だけでいいです。今後、動的に変わる可能性はあります…。
yambejp

2019/11/27 07:28

ul.contentsとul.subNavの二重にcurrentを付加する意味はあるのでしょうか?
azuapricot

2019/11/27 08:07

「ロードされた時」に、current属性がついている li要素を取得 → 子要素のチェックボックスにチェックを入れる
crigw

2019/11/27 08:08

>yambejpさん 適応CSS(デザイン)が違うため二重付与してましたが、CSS側で調整できますね…!
yambejp

2019/11/27 08:13

回答の方をみてください
guest

回答2

0

ベストアンサー

javascript

1$(function(){ 2 var href = location.href.match(".+/(.+?)([?#;].*)?$")[1]; 3 $('.contents:has(a[href="'+href+'"]),.subNav:has(a[href="'+href+'"])').addClass('current'); 4 $('.subNav:has(a[href="'+href+'"])').prevAll('.acc-subOpen').prop('checked',true); 5});

調整版

content→item

javascript

1<style> 2.item.current{ 3color:aqua; 4} 5.subNav.current{ 6color:lime; 7} 8</style> 9 10<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 11<script> 12$(function(){ 13 $('.current').removeClass('current'); 14 var href = location.href.match(/.+?(?=[?#]|$)/)[0]; 15 $('a').filter(function(){ 16 return $(this).prop('href').match(href); 17 }).closest('.subNav').addClass('current').closest('.item').addClass('current'); 18 $('a').filter(function(){ 19 return $(this).prop('href').match(href); 20 }).closest('.subNav').prevAll('.acc-subOpen').prop('checked',true); 21}); 22</script> 23 24 25<div id="mainNavBox"> 26<ul class="contents"> 27 <li class="item"> 28 <input id="acc-subOpen-home" class="acc-subOpen" type="checkbox"> 29 <label class="acc-unshown" for="acc-subOpen-home">Home</label> 30 <ul class="subNav"> 31 <li class="current"><a href="./top.html">トップページ</a></li> 32 <li><a href="#">お知らせ一覧</a></li> 33 <li><a href="#">リリースノート一覧</a></li> 34 </ul> 35 </li> 36 <li class="item"> 37 <input id="accSP-subOpen-home" class="acc-subOpen" type="checkbox"> 38 <label class="acc-unshown" for="accSP-subOpen-home">マイページ</label> 39 <ul class="subNav"> 40 <li><a href="profile.html">プロフィール</a></li> 41 <li><a href="keiyaku.html">契約状況</a></li> 42 </ul> 43 </li> 44</ul> 45</div>

投稿2019/11/27 07:29

編集2019/11/28 01:17
yambejp

総合スコア116661

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

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

crigw

2019/11/27 08:18

こちら記述してみたのですが、.crurrentが付与されず また、labelクリックできなくなってしまいました。
yambejp

2019/11/27 08:23 編集

location.hrefのファイル名とa hrefが完全一致するものを拾っていますが マッチングの想定が違うのでしょうか? (getのパラメータやらハッシュやらまで評価したい?)
crigw

2019/11/27 08:44

現時点[a href="./xxx.html"]で指定していますが、将来的には[a href="{{route('top')}}"]と言った記述になり、指定内容と実際表示されるURLでは違いが生じるようです…。私はこの部分理解できていないのですが、とりあえず現時点では[a href="./xxx.html"]や[a href="./xxxl"],[a href="./"]など想定に入るようにしていただければと…それって可能でしょうか?
yambejp

2019/11/27 08:58 編集

属性(attr)ではなくプロパティーでアクセスすれば調整可能です あとで調整してみます ただ「./」と「./index.html」は同じものと評価できませんが大丈夫ですか?
crigw

2019/11/27 09:24

ありがとうございます。 多分大丈夫だと思いますが、同じものと評価できない場合何か不具合はおきますでしょうか?
yambejp

2019/11/27 10:40

とりあえず調整版あげておきました 挙動が違う場合は指示してください
crigw

2019/11/28 01:08

お忙しい中ご調整いただきありがとうございました。 ただ大元の親である<ul class="contents">にcurrentがついてしまうためか、全てのアコーディオンが開いてしまいます…やはり、「li.item」と「ul.subnav li」にcurrentがつくようにしていただくことって可能でしょうか…!
yambejp

2019/11/28 01:17

単純にcontentsをitemに返るだけでよいでしょう。 調整版を修正しておきました
crigw

2019/11/28 07:20

何度も調整いただきありがとうございました! いまだに全てのアコーディオンが開いていしまいますが、残りは頑張って調整してみたいとおもいます。
guest

0

current があるとき

jQuery

1$('.acc-subOpen', $('.current').closest('.item')).prop('checked', true).trigger('change');

https://api.jquery.com/trigger/

投稿2019/11/27 07:17

x_x

総合スコア13749

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

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

crigw

2019/11/29 03:08

気づくのが大変遅れてしまいました、申し訳ございません! こちらでも動作しました。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問