2017-08-19 5 views
1

誰かがクリックするまでdivを閉じたままにして、開いているか閉じているかを覚えています。ここで私がこれまで持っているものです。cookieまたはlocalStorageを使用してdivのオープン/クローズ状態を覚えておく方法は?

<input id="chk1" type="button" value="Click here"/> 

<div id="box1" style="display:none"> 
    <!-- HTML STUFF HERE --> 
</div> 

<script> 
    jQuery.noConflict(); 
    jQuery(document).ready(function($) { 
     $('#chk1').click(function() { 
     $('#box1').slideToggle('200'); 
     localStorage.setItem('show', 'true'); 
     }); 
    }); 
</script> 

それはdivのオープン/クローズ状態を覚えていないことを除いそれは動作します。

可能であれば、これ以上スクリプトを追加せずにやりたいと思います。

+0

'localStorage.getItem( 'show')'を使って、 'localStorage'に格納されている値をチェックして、それがtrueかfalseかをチェックする必要があります。その後、最初にdivを表示/非表示にします。また、 'show'の値を​​' true/false'に切り替えることもありません。値を切り替えて、状態を変更します。 –

答えて

2

問題は、実際にはどこでもlocalStorageをチェックしていないことです。この設定を切り替えようとしているので、show'true'に設定しないでください。

<script> 
    jQuery.noConflict(); 
    jQuery(document).ready(function($) { 
    $box1 = $('#box1'); 
    const show = JSON.parse(localStorage.getItem('show')); 

    if (show) { 
     $box1.show(); 
    } else { 
     // initialize value in case it hasn't been set already 
     localStorage.setItem('show', false); 
    } 

    $('#chk1').click(function() { 
     $box1.slideToggle('200'); 
     // toggle the boolean by negating its value 
     const show = JSON.parse(localStorage.getItem('show')); 
     localStorage.setItem('show', !show); 
    }); 
    }); 
</script> 

これらは文字列としてあなたに与えられているので、値はローカルストレージから取り出すことに注意してくださいは、JSONとしてパースする必要があります。

そして、ネストされたブロックを常に正しくインデントすることで、簡単に作業できます。読みやすくなりました。

+0

かなりうまく動作していません。ブラウザをクリアした後にページに行くとdivが閉じられますが、ページをリフレッシュするとdivが開きます。それを閉じてページを更新しようとすると、まだ開いたままです。 – Freejoy

+0

@Freejoyもし 'localStorage.setItem(...)'が値を文字列に変換してから保存するのを忘れて、エラーが発生しました。つまり、元の値を取得するにはJSON.parseを使用するか、値を文字列として扱うだけです。私の間違い!私は答えを編集しました。 (プリミティブな値の代わりにオブジェクトを保存したい場合は、最初に 'JSON.stringify'を呼び出さなければなりません) – philraj

+1

これは完全に機能します。ありがとう – Freejoy

関連する問題