2017-11-15 11 views
0

私は要素の表示を切り替えようとしていますが、以下の '==='を使って条件付きの文を使っていますが、作業するコード。Javascriptの条件文が失敗する

誰かが 'if(smallnavbar [0] .style.display ===' none ')'という条件が機能しない理由を知っていますか?コードを動作させる方法(noneとflexの間で表示を切り替える)はありますか?

ありがとうございます!

function displayMenu(){ 
    var smallnavbar = document.getElementsByClassName("small-navbar-tabs"); 
    if (smallnavbar[0].style.display === 'none') { 
    smallnavbar[0].style.display = 'flex'; 
    } 
    else if (smallnavbar[0].style.display === 'flex') { 
    smallnavbar[0].style.display = 'none'; 
    } 
} 
+0

使用' ==を。 '==='は型変換を行いません。 –

+0

デバッグを試しましたか?関数の先頭に改行を置き、ステップスルーします。状況に少し注意を払う必要がある 'smallnavbar'に保存されているものを見てください。 – nurdyguy

+1

要素に実際に表示プロパティセットが設定されていますか?それらがCSSでのみ設定されている場合、このコードは機能しません。計算されたCSSを取得する必要があります。 – skyline3000

答えて

2

style.displayインラインスタイル(<div style='display:block'></div>)を参照しています。 displayがスタイルシートのクラスによって設定されている場合、displayの値は空の文字列になります。

このような場合、どちらの条件も真でないため、「失敗」しているように見えます。

ifの文の前に私の仮説をconsole.logで二重にチェックするだけでいいです(当然、displayMenuと呼んでいると仮定します)。

これを解決するにはいくつかの回避策があります。 することはでき:

  1. チェック代わりに、インライン1の要素のcomputed style

    function displayMenu(){ 
        var smallnavbar = document.getElementsByClassName("small-navbar-tabs"); 
        var display = window.getComputedStyle(smallnavbar[0], "").display; 
    
        smallnavbar[0].style.display = display === 'none' ? 'flex' : 'none'; 
    } 
    

    }

  2. "フレックス" と "なし" のための別のクラス名を持ち、値の代わりにその値を確認してください(ブラウザのサポートがある場合、または簡単なclassListのシムを提供する場合は

    smallnavbar[0].classList.toggle("flexible"); 
    
  3. と仮定します。あなたは、したがって、あなたが持っている可能性があり、デフォルトですべてのsmall-navbar-tabsは、例えばdisplay:none持っていることを知っている: `ではなく` === `の

    if (smallnavbar[0].style.display === "flex") { 
        smallnavbar[0].style.display = ""; // remove the inline style 
    } else { 
        // since we're adding the inline style here, 
        // it would pass the first check in the future. 
        smallnavbar[0].style.display = "flex"; 
    } 
    
+0

ちょっと@ZERO。あなたの非常に完全な答えをありがとう!多数の回避策をおかげさましてありがとうございます。ソリューションを実現するためのさまざまな経路を見てみるのは本当に面白いです。私はあなたが説明したすべてを理解しているとは思っていません(私のJSの知識はまだまだ基本的ですが、改善しています)が、2番目の回避策は一見すばらしく、もう少し研究をしなければなりません。最初に試して、それは仕事をし、 'classList'を見ていきます。もう一度ありがとう、本当にありがとう:))素晴らしい週末を過ごす! – TheLemonSong

関連する問題