2017-10-12 5 views
1

私のコードがなぜ必要としないのでしょうか?私がそれをクリックすると、最初の2回、モバイルナビがトグルされたときにうまく動作しますが、3回目には余裕ができません。クリックしたときにメニューがスペーシング(マージン)を切り替える

jQuery(document).ready(function($){ 
    $("#site-navigation.main-navigation").click(function(){ 
    $("#page").css("margin-top", "285px"); 
    }); 

    $("#site-navigation.main-navigation.toggled").click(function(){ 
    $("#page").css("margin-top", "0px"); 
    }); 
}); 
+0

1)あなたは、誰もがデバッグできるようにするにはHTMLを含める必要があります。 2)コードスニペットがStackOverflow用に適切にフォーマットされていない - スニペットエディタの別の部分にJavascriptとHTMLを別々に追加して、自動的に実行できるようにする必要があります。 –

+0

また、最初のクリック機能を正しく終了していません... – Gabplay

+0

このロジックのように感じます。ページロード時の初期状態に基づいて要素のバインディングを定義しているため、問題が発生します。メインナビゲーション要素から 'toggled'クラスを追加/削除しても、他のバインディングの使用を開始することはありません。その上に配置されているバインディングのみを使用します。直接バインディングのこの短期間の到来は、デリゲートバインディングを使用することによって終わる可能性があります。 – Taplar

答えて

2

#site-navigation.main-navigationに「.toggle」クラスがある場合、2つのイベントが同時に発生しています。それはあなたが意図したものではありません。このコードはあなたが望むことをします。

jQuery(document).ready(function($){ 
    $("#site-navigation.main-navigation").click(function(){ 
     if ($(this).hasClass('toggled')) { 
      $("#page").css("margin-top", "0px"); 
     } else { 
      $("#page").css("margin-top", "285px"); 
     } 
    }); 
}); 
+0

このケースでは問題ありませんが、イベントリスナーの順番は正常に動作します。何か他の問題があります。 – Joint

0

CSSクラスを切り替えます。

document.getElementById("foo").addEventListener("click", function(e) { 
 
    this.classList.toggle("bump-it"); 
 
});
.bump-it{ 
 
    margin-left:24px; 
 
}
<button id="foo"> 
 
click me 
 
</button>

関連する問題