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

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

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

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

Q&A

解決済

2回答

1344閲覧

jqueyの繰り返しをスマートにしたい

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

0グッド

0クリップ

投稿2018/04/02 10:46

###■目的
同じ処理を繰り返すjqueryがあるので、スマートに一括したいです。

###■現状
次のjqueryが【cookieがあればチェックする】という仕組みを担当してくれているのですが、

後述する【チェックされたらdisplay:table-cell;する】というjqueryの書き方で躓いております。

▼【cookieがあればチェックする】

javascript

1(function($){ 2$(function(){ 3 4 //読み込み(cookieがあればチェックする) 5 if($.cookie("chk_selected_value")){ 6 $.cookie("chk_selected_value").split(",").forEach(function(v){ 7 $('input[name=chk][value='+v+']').prop('checked',true); 8 }); 9 } 10 11 //保存(.saveクリックでcookie保存) 12 $('.save').on("click",function(){ 13 var v=$('input[name=chk]:checked').map(function(){return $(this).val()}).get().join(","); 14 if(v===""){ 15 $.removeCookie("chk_selected_value"); 16 }else{ 17 $.cookie("chk_selected_value",v); 18 } 19 }); 20}); 21})(jQuery);

現状は上のコードに加えて、次のように1つずつ指示しているところです。

▼【チェックされたらdisplay:table-cell;する】

javascript

1(function($){ 2$(document).ready(function () { 3 4 //もし「#a」がチェックされてたら display:table-cell; して 5 if ($("#a").prop("checked") == true) { 6 $(".a").css('display', 'table-cell'); 7 8 //チェックされてなければ display:none; してね 9 } else { 10 $(".a").css('display', 'none'); 11 } 12 13 //もし「#b」がチェックされてたら display:table-cell; して 14 if ($("#b").prop("checked") == true) { 15 $(".b").css('display', 'table-cell'); 16 17 //チェックされてなければ display:none; してね 18 } else { 19 $(".b").css('display', 'none'); 20 } 21 22}) 23})(jQuery);

これでもまぁなんとかできているのですけれど、#a #b #c #d #e…と数百個あるので、このように1個ずつ指示するのはチョットいやな感じです。

そこで、冒頭の目的に書いたように、スマートに一括する方法を探しているところなのです。

###■やってみたこと
いちおう次のようにすればスマートに一括できるか、と、思ったのですが、どうにもできず、躓いている次第です。

▼【チェックされてたらdisplay:table-cell;する】

javascript

1(function($){ 2$(document).ready(function () { 3 4 //チェックされているvalueをopenに代入して 5 open = $('input[name="chk"]:checked').map(function() { 6 return $(this).val(); 7 }).get(); 8 9 //もし「#open(#aや#bなど)」がチェックされてたら display:table-cell; して 10 if ($('#' + open).prop("checked") == true) { 11 $('#' + open).css('display', 'table-cell'); 12 13 //チェックされてなければ display:none; してね 14 } else { 15 $$('#' + open).css('display', 'none'); 16 } 17 18}); 19})(jQuery);

どなたかスマートな方がいらっしゃいましたらご教示いただければ幸いです。何卒よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

こんな感じですか?

javascript

1<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 2<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js"></script> 3<script> 4$(function(){ 5 if($.cookie("chk_selected_value")){ 6 $.cookie("chk_selected_value").split(",").forEach(function(v){ 7 $('input[name=chk][value='+v+']').prop('checked',true); 8 }); 9 } 10 $('input[name=chk][id]').on('change',function(){ 11 var flg=$(this).prop('checked'); 12 $('.'+$(this).attr('id')).css("display",flg?"table-cell":"none"); 13 }).trigger('change'); 14 $('.save').on("click",function(){ 15 var v=$('input[name=chk]:checked').map(function(){return $(this).val()}).get().join(","); 16 if(v===""){ 17 $.removeCookie("chk_selected_value"); 18 }else{ 19 $.cookie("chk_selected_value",v); 20 } 21 }); 22}); 23</script> 24<input type="checkbox" name="chk" value="1" id="a">1<br> 25<input type="checkbox" name="chk" value="2" id="b">2<br> 26<input type="checkbox" name="chk" value="3" id="c">3<br> 27<input type="button" value="save" class="save"><br> 28 29<div class="a">a1</div> 30<div class="a">a2</div> 31<div class="a">a3</div> 32<div class="b">b1</div> 33<div class="b">b2</div> 34<div class="b">b3</div> 35<div class="c">c1</div> 36

投稿2018/04/02 11:11

yambejp

総合スコア114839

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

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

退会済みユーザー

退会済みユーザー

2018/04/02 11:55

おぉ、おおお…完璧です。 そこにひとまとめにできるのではないか、とは思っていたのですが、まさかそうして頂けるとは思っておりませんでした。 文句なしでベストアンサーにさせて頂きます。 毎日まいにち、何度もなんども、どうもありがとうございますっ!!
guest

0

js

1$('input[name="chk"]').each(function(){ 2 if ($(this).prop("checked") == true) { 3 $( '.' + $(this).attr('id') ) //... 4//... 5});

とかはいかがでしょうか。

投稿2018/04/02 11:04

Lhankor_Mhy

総合スコア36115

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

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

退会済みユーザー

退会済みユーザー

2018/04/02 11:59

Lhankor_Mhyさん、こんばんは。 先日Lhankor_Mhyさんにご回答いただいたことの続きみたいなものでして、結局苦戦して質問してしまいました。笑 んっと、次のようにすればいいのですね。できました。 (function($){ $(document).ready(function () { $('input[name="chk"]').each(function(){ //チェックされていたら表示してね if ($(this).prop("checked") == true) { $( '.' + $(this).attr('id') ).css('display', 'table-cell'); //チェックされてなければ非表示だよ } else { $( '.' + $(this).attr('id') ).css('display', 'none'); } }); }); })(jQuery); 今回はyambejpさんをベストアンサーにさせて頂きましたけれど、あちらは完璧すぎてちょっと私が後でわからなそうなので笑、実際にはLhankor_Mhyさんのこの方法でいってみたいと思います。 いつもありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問