2016-03-29 5 views
0

Ich benutze LocalStorage, um ein Toggle-Banner offen/geschlossen zu halten. Leider konnte ich nicht korrekt eine offene Klasse auf dem Toggle # button des Banners implementieren, um den Stil entsprechend zu ändern.LocalStorage kann die Klasse 'open' nicht hinzufügen und behalten

mein Code:

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

mein 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> 

Ich versuchte, die toggleClass ($(this).toggleClass('open');) an die slideToggle Funktion einstellen, aber dies scheint nicht der richtige Ansatz zu sein, wie es nicht ist korreliert mit dem LocalStorage-Verhalten. Irgendein Rat?

+1

Wollen Sie nicht wissen, ob '$ ('# Banner') ist (': hidden').' Statt '$ (this) .ist (': Verstecktes ') ', das auf deinen Knopf verweist (von dem ich annehme, dass er immer als dein Schalter sichtbar ist)? – somethinghere

+0

Korrigieren. aktualisiert den Post – user3615851

+0

localStorage standardmäßig auf Zeichenfolgen, sofern nicht über JSON.parse analysiert. Davon abgesehen könnte dies ein Problem mit dem gleichen Betreiber sein. @ user3615851 hast du versucht mit ===? – rabruce

Antwort

0

Problembehebung durch die ‚activeClass‘ Makeln oder ‚offen‘ und prüfen, ob es existiert beim Laden von Dokumenten.

$(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

wickeln Sie Ihr Javascript in ein jQuery Dokument bereit Anruf. Ihr Problem ist, dass die Javascript das Banner zu verbergen ausgeführt wird, bevor das DOM das Element Banner macht:

$(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() 
    } 
}); 

Geige: https://jsfiddle.net/fcewjh7a/3/

+0

Hallo, ich denke, ich habe mich nicht klar dargestellt. Sie können mein Problem hier sehen: https://jsfiddle.net/fcewjh7a/6/. Wenn das Banner geschlossen ist, wird die Schaltfläche schwarz. Nachdem ich aktualisiert habe, ist der Button nicht mehr schwarz. – user3615851

+0

Ich habe eine jsFiddle erstellt, um das Problem zu veranschaulichen: https://jsfiddle.net/fcewjh7a/10/ Nach der Aktualisierung sollte die Klasse 'ActiveClass' auf der Schaltfläche beibehalten werden, aber es ist nicht. – user3615851