2017-06-05 7 views
0

jQuery hasClassに問題があります。jQuery hasClassおよびif

$(document).ready(function() { 

var body = $('body'), 
    leftPane = $('.pane-left'); 

leftPane.on('click', function() { 

    body.removeClass('left-closed'); 
    body.addClass('left-open'); 
    $('.pane-left h2').fadeIn(600); 

    setTimeout(function() { 
     rightPane.fadeOut(0); 
     $('.pane-left-wrap').fadeIn(100); 
     $('.pane-left-wrap .secondary-nav li:first-child').fadeIn(100); 
     $('.pane-left-wrap .secondary-nav li:nth-child(2)').fadeIn(600); 
     $('.pane-left-wrap .secondary-nav li:nth-child(3)').fadeIn(1200); 
     $('.pane-left-wrap .secondary-nav li:nth-child(4)').fadeIn(1800); 
     $('.pane-left-wrap .secondary-nav li:nth-child(5)').fadeIn(2400); 
    }, 600); 

}); 

if(body.hasClass('left-open')) { 

    leftPane.on('click', function() { 

     body.removeClass('left-open'); 
     body.addClass('left-closed'); 
     $('.pane-left h2').fadeOut(600); 

    }); 

} 

}); 

クリックすると左ペイントと左ペインが自分のbodyタグに追加されます。次に私は再びクリックしますが、if()内のコードに到達できません。何故ですか?

+1

「if」条件はページの読み込み時にのみ実行され、クリックがクラス「left-open」を追加した後ではありません。 – Matt

+0

条件付きバインディングのかわりに、バインディング内の状態をチェックして、ロジックを実行するかどうかを確認します。または、可能であれば、それを子セレクタの一部として条件付きチェックを含むデリゲートバインディングに変更します。 – Taplar

+0

hasClassの 'if'はクリックハンドラの中になければなりません。つまり、クリックハンドラを1つ持ち、クラス内でクラスをチェックしてください。 – Huangism

答えて

0

状態がdocument.readyの状態で1回だけ実行される場合は、clickイベントの場合は追加する必要があります。しかし、あなたはclickイベントでアクションを持っていると私はそれがあなたの目的のために正しいコードだと思う:

$(document).ready(function() { 

    var body = $('body'), 
     leftPane = $('.pane-left'); 

    leftPane.on('click', function() { 

     if(body.hasClass('left-open')) { 
      body.removeClass('left-open'); 
      body.addClass('left-closed'); 
      $('.pane-left h2').fadeOut(600); 
     } else { 
      body.removeClass('left-closed'); 
      body.addClass('left-open'); 
      $('.pane-left h2').fadeIn(600); 

      setTimeout(function() { 
       rightPane.fadeOut(0); 
       $('.pane-left-wrap').fadeIn(100); 
       $('.pane-left-wrap .secondary-nav li:first-child').fadeIn(100); 
       $('.pane-left-wrap .secondary-nav li:nth-child(2)').fadeIn(600); 
       $('.pane-left-wrap .secondary-nav li:nth-child(3)').fadeIn(1200); 
       $('.pane-left-wrap .secondary-nav li:nth-child(4)').fadeIn(1800); 
       $('.pane-left-wrap .secondary-nav li:nth-child(5)').fadeIn(2400); 
      }, 600); 
     } 
    }); 

}); 
0

移動クリックハンドラへ.left-openのチェックを。

$(document).ready(function() { 
    var body = $('body'), 
    leftPane = $('.pane-left'); 

    leftPane.on('click', function() { 

     // Added for check 'left-open' class. 
     if(!body.hasClass('left-open')) { 
      body.removeClass('left-closed'); 
      body.addClass('left-open'); 
      $('.pane-left h2').fadeIn(600); 

      setTimeout(function() { 
       rightPane.fadeOut(0); 
       $('.pane-left-wrap').fadeIn(100); 
       $('.pane-left-wrap .secondary-nav li:first-child').fadeIn(100); 
       $('.pane-left-wrap .secondary-nav li:nth-child(2)').fadeIn(600); 
       $('.pane-left-wrap .secondary-nav li:nth-child(3)').fadeIn(1200); 
       $('.pane-left-wrap .secondary-nav li:nth-child(4)').fadeIn(1800); 
       $('.pane-left-wrap .secondary-nav li:nth-child(5)').fadeIn(2400); 
      }, 600); 
     } 

     // Moved this function inside click event. 
     if(body.hasClass('left-open')) { 
      leftPane.on('click', function() { 
       body.removeClass('left-open'); 
       body.addClass('left-closed'); 
       $('.pane-left h2').fadeOut(600); 
      }); 
     } 
    }); 
}); 
+0

既に不正な書式設定を使用している場合は、コード内で変更した内容を少なくとも説明してください。 – Christoph

+0

必要に応じてコメントが追加されました。不便をおかけして申し訳ありません。 – Aman

0

これはあなたのシナリオに適しているようだ何あなたが(クリーンアップバージョン)を探していると.toggleClass();あるように聞こえます。

if ($('body').hasClass("left-open")) { 
    $('#leftPaneElem').click(function() { 

     body.toggleClass('left-closed'); 

      // more stuff 

    }); 
}