2016-03-29 5 views
0

私はLocalStorageを使用してトグルバナーを開いたり閉じたりしています。 残念ながら、バナーの#buttonの切り替えボタンで開いているクラスを適切に維持して、それに応じてスタイルを変更することができませんでした。LocalStorageは 'open'クラスを追加できず、そのまま保持します

私のコード:

$('#button').click(function() { 
    $(this).siblings().slideToggle(function() { 
    localStorage.setItem('display', $('#banner').is(':hidden')); 
    }); 
}); 
var block = localStorage.getItem('display'); 
if (block == 'true') { 
    $('#banner').hide() 
} 

私のhtml

<div id="banner_container"> 
    <div id="banner"> 
     <img src="#"> 
    </div> 
    <button id="button" href="javascript:void(0);"></button> <!-- toggle 'open' class if banner is visible/hidden and keep it in LocalStorage --> 
</div> 

私はslideToggle機能にtoggleClass($(this).toggleClass('open');)を設定しようとしたが、それがないと、これは正しいアプローチではないようですLocalStorageの動作と相関しています。何かアドバイス?

+1

あなたは '$( '#バナー')かどうかを知っている必要はありません( ':隠された')である代わりに' '$(この)のは '(.is:あなたのボタンを参照しています(私はあなたのトグルとして常に見えると思います)? – somethinghere

+0

正しい。投稿を更新しました – user3615851

+0

JSON.parseで解析されない限り、localStorageはデフォルトで文字列になります。つまり、これはオペレータの問題と同じである可能性があります。 @ user3615851あなたは===を使ってみましたか? – rabruce

答えて

0

問題あなたの問題は、DOMは、バナー要素をレンダリングする前にバナーを非表示にするには、JavaScriptを実行していることですドキュメントの読み込みに存在します。

$(document).ready(function() { 
    $('#button').click(function() { 
    $(this).siblings().slideToggle(function() { 
     localStorage.setItem('display', $('#banner').is(':hidden')); 
    }); 
    }); 
    var block = localStorage.getItem('display'); 
    if (block == 'true') { 
    $('#banner').hide() 
    } 
}); 
$(document).ready(function() { 
    $('#button').click(function() { 
    $('#button').toggleClass('activeClass'); 
    }); 
}); 
$(document).ready(function() { 
    if (!$('#banner').is(':hidden')) { 
    $('#button').addClass('activeClass'); 
    } else if (!$('#banner').is(':visible')) { 
    $('#button').removeClass('activeClass'); 
    } 
}); 

JSFiddle:https://jsfiddle.net/fcewjh7a/17/

0

jqueryドキュメントレディコールでJavaScriptをラップします。

$(document).ready(function() { 
    $('#button').click(function() { 
     $(this).siblings().slideToggle(function() { 
     localStorage.setItem('display', $('#banner').is(':hidden')); 
     }); 
    }); 
    var block = localStorage.getItem('display'); 
    if (block == 'true') { 
     $('#banner').hide() 
    } 
}); 

フィドル:「activeClass」または「オープン」をトグルし、それかどうかをチェックすることによって解決https://jsfiddle.net/fcewjh7a/3/

+0

こんにちは、私は自分自身を明らかにしていないと思います。あなたはここに私の問題を表示することができます:https://jsfiddle.net/fcewjh7a/6/。バナーが閉じられると、ボタンは黒くなります。私がリフレッシュした後、ボタンはもはや黒ではありません。 – user3615851

+0

問題を説明するためにjsFiddleを作成しました:https://jsfiddle.net/fcewjh7a/10/ リフレッシュ後、 'ActiveClass'クラスはボタンに保持されるべきですが、そうではありません。 – user3615851

関連する問題