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

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

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

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

Q&A

解決済

2回答

1968閲覧

javascriptのif文の処理に関して

hamotaga54

総合スコア13

JavaScript

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

0グッド

0クリップ

投稿2018/03/06 21:17

if文をクラス名で判別して、処理を分けたい

isotopeとInfinite Scrollを使ったページを作成しています。
1回目にリストをクリックした時は、if文の最初の処理を行い、
2回目以降はelseの処理を行いたいと思っています。
判定するclassも、javascriptでクラスを付与しています。
どうしても、1回目をクリックした時に、if文の処理がされません。
2回目以降は、elseの処理は動いています。
色々と試したのですがうまくいきません。
ご教授頂けますとうれしいです。
よろしくお願いいたします。

該当のソースコード

javascript

1 <script type="text/javascript"> 2 3 $('#filters-2').on( 'click', 'li', function() { 4 $("#container").addClass("selected"); 5 }); 6 7 var element = document.getElementById('container'); 8 $('#filters-2').on( 'click', 'li', function() { 9 if( element.classList.contains('selected') == false ){ 10 $(function() { 11 $.ajax({ 12 url: 'pages/2.html', 13 cache: false, 14 success: function(html){ 15 $('#filters-2').on( 'click', 'li', function() { 16 $(html).find('#container').each(function(){ 17 $('#container').prepend(this).isotope( 'reloadItems' ).isotope({ sortBy: 'original-order' }); 18 return false; 19 }); 20 }); 21 } 22 }); 23 }); 24 } 25 else { 26 var $container = $('#container').isotope(); 27 $('#filters-2').on( 'click', 'li', function() { 28 var filterValue = $(this).attr('data-filter'); 29 $container.isotope({ filter: filterValue }); 30 return false; 31 }); 32 } 33 return false; 34 }); 35 </script>

HTML

1 <ul class="work_cate button-group" id="filters-2"> 2 <li class="cate_all" data-filter="*">ALL</li> 3 <li class="cate_item1" data-filter=".item-1">ITEM1</li> 4 <li class="cate_item2" data-filter=".item-2">ITEM2</li> 5 <li class="cate_other" data-filter=".item-other">OTHERS</li> 6 </ul> 7 <div id="container" class="clearfix infinite-scrolling"> 8 <div class="element cate_item1" data-symbol="H" data-category="other"> 9 <p class="number">1</p> 10 </div> 11 <div class="element cate_item2" data-symbol="H" data-category="other"> 12 <p class="number">2</p> 13 </div> 14 </div>

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

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

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

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

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

guest

回答2

0

js

1$('#filters-2').on( 'click', 'li', function() { 2 $("#container").addClass("selected"); // ……A 3}); 4 5var element = document.getElementById('container'); 6$('#filters-2').on( 'click', 'li', function() { // ……B 7 if( element.classList.contains('selected') == false ){ 8 // ……C 9 } 10});

という構造のため、#filters-2がクリックされると、A→Bの順で実行されます。そうすると#containerにはselectedというclassが必ずついていますので、Cが実行されることはありません。
Aの処理をCの最後で行えば、想定した動作になるのではないでしょうか。

投稿2018/03/07 00:54

Lhankor_Mhy

総合スコア36080

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

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

hamotaga54

2018/03/07 05:27

ご回答ありがとうございます! isotopeが原因かもしれないですが、 順番を変えても想定どおりになりませんでした。
guest

0

ベストアンサー

isotopeについてはよくわかりませんが

$('#filters-2').on( 'click', 'li', function() {

$("#container").addClass("selected");

});

で、#filters-2をクリックするたびにつねにselectedを付加しているので
ifで判断している

if( element.classList.contains('selected') == false ){

すなわち

if( !$('#container').hasClass('selected')){

は、常に偽になりますのでelseに流れるでしょうね

流れ的には以下のようにするとよいのではないでしょうか?

javascript

1$(function(){ 2 $('#filters-2 li').on('click',function(){ 3 if( !$('#container').hasClass('selected')){ 4 console.log(1); 5 $("#container").addClass("selected"); 6 }else{ 7 console.log(2); 8 } 9 }); 10});

投稿2018/03/07 00:46

yambejp

総合スコア114812

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

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

hamotaga54

2018/03/07 03:52

このソースで試してみたらうまくいきました。 ありがとうございます。 すごく、数時間悩んでいたので助かりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問