#1 Div durch Link mit Cookie ausblenden von toggodamian 10.10.2011 17:45

avatar

Hallöchen,
Ich habe ein Script der normalerweiße per Cookie einen Div-Container ein und ausbelden sollte.
Naja sagen wir es mal so, ein Link blendet es entweder ein oder aus und das wird in das Cookie gespeichert so das es entweder eingebledet beim nächsten aufruf bleibt oder Ausgeblendet.
So sieht es aus:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 
function readCookies()
{
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var t = ca[i];
while (t.charAt(0)==' ') t = t.substring(1,t.length);
var c = t.split('=');
if (c[1]=='auf')
{
document.getElementById(c[0]).style.display = 'block';
document.getElementById('pic'+c[0]).src = './style/minus.gif';
}
else if (c[1]=='zu')
{
document.getElementById(c[0]).style.display = 'none';
document.getElementById('pic'+c[0]).src = './style/plus.gif';
}
}
 
}
 
function klapp(elementID)
{
if (document.getElementById(elementID).style.display == 'block')
{
document.getElementById(elementID).style.display = 'none';
document.getElementById('pic'+elementID).src = './style/plus.gif';
document.cookie = elementID+'=zu';
}
else if (document.getElementById(elementID).style.display == 'none')
{
document.getElementById(elementID).style.display = 'block';
document.getElementById('pic'+elementID).src = './style/minus.gif';
document.cookie = elementID+'=auf';
}
}
 


Linkaufruf:

1
2
 
<a href="javascript:klapp('container1')"><img src="minus.gif" border=0 id="piccontainer1"/></a>
<div id="container1" style="display: block"> <p>Hier folgt der Inhalt der aus- und eingeblendet werden soll<br>container1</p> </div>
 


Das erste ausblenden funktioniert soweit nur dann geht nichts mehr und beim nächsten Seitenladen erscheint es wieder.

#2 RE: Div durch Link mit Cookie ausblenden von florian-zier 13.10.2011 14:59

avatar

Hallo toggo,
ich habe nun eine funktionierende Version deines Skripts.
Also ich muss sagen, dieses Mal habe ich leider sehr viel umprogrammieren müssen.
Was hast du denn da bloß fabriziert?!?

Nein, mal Spaß beiseite, eigentlich hat dein Skript schon funktioniert, ich habe aber auch erstmal eine Weile darübergeschaut, bis mir das aufgefallen ist.
Der Grund, warum es beim erneuten Laden der Seite nichts getan hat, war kein Fehler, sondern es wusste einfach nicht, dass es etwas tun soll.
Wenn du deinem Skript per Onload einen Befehl erteilst, wird es auch gehorchen.
Also im Prinzip fehlt dir nur die Anweisung beim Laden der Seite, das Cookie wird ansonsten richtig interpretiert.

Ich habe dir noch eine kleine abgeänderte Version im Anhang bereitgestellt.
Ein Onload-Aufruf wäre darin vorhanden, ebenso habe ich die Cookie-Funktion umbenannt, um evtl. Konflikte mit zukünftigen Cookie-Skripten zu vermeiden.
Sonst sind es nur wirklich minimale Änderungen.
Ach ja, in der Funktion readKlappCookie() habe ich noch einen IF-Block auskommentiert.
Du brauchst ihn eigentlich nicht, da der Container ohne Cookie oder im Zustand "auf" ja sowieso eingeblendet bleibt und könntest ihn also komplett entfernen, es sei denn, du möchtest da noch etwas anderes ausführen.

Du müsstest nun aber wieder die Grafiken gegen deine eigenen austauschen.
Ich hatte sie ja nicht zum Testen verfügbar und habe deshalb einfach eine komplette URL aus dem WWW verwendet.
Um es einfacher zu machen, musst du sie nur zweimal ganz oben im Skript angeben (und einmal unten beim HTML).

Also viel Spaß noch mit deinem funktionstüchtigen Skript.

#3 RE: Div durch Link mit Cookie ausblenden von toggodamian 13.10.2011 18:35

avatar

Hi Florian,
Der Code funktioniert schonmal super
Was ich nur bemerkt habe wen ich den Container ausgeblendet habe bendet dr Container sich zur ein und dann erst aus wen man bsp. auf F5 drückt.
Lässt sich da noch was machen?

#4 RE: Div durch Link mit Cookie ausblenden von florian-zier 13.10.2011 23:07

avatar

Hi toggo,
das geht (im Prinzip) leider nicht schneller.

Das Problem dahinter:
Der Quellcode wird vom Browser geladen und die Seite wird dargestellt.
Dann erst wird das JavaScript bearbeitet und eben der Container ausgeblendet.


Zwei Möglichkeiten könntest du zwar noch probieren, aber sie sind nicht zu empfehlen, da User ohne aktiviertes JavaScript den Container nicht mehr sehen würden.

Die eine wäre es, den Container standardmäßig auszublenden und dann nach Auslesen des Cookies ggf. doch noch einzublenden. (auskommentiertes IF)
So wird nach dem Laden des Quellcodes die Seite erst einmal ohne Container dargestellt.

Die andere Möglichkeit ist es, das JavaScript direkt in die Seite einzubetten (ohne Funktionen) direkt an die Stelle, an die der Container soll.
Dann per document.write() dementsprechend den Container durch JavaScript in die Seite schreiben.

Also, solltest du wirklich zu einer der obigen Methoden zurückgreifen, nehme die erstere.
So ist der Text trotzdem noch in der HTML-Struktur vorhanden (für z.B. Suchmaschinen).
Allerdings ignorieren Suchmaschinen gerne mal mit Absicht ausgeblendete Inhalte.
Das nächste Argument dafür ist aber, dass direkt in die Seite eingefügtes JavaScript beim Laden der Seite zuerst noch ausgeführt wird, bevor der Rest des Quelltextes weitergeladen wird.
Das verzögert das Laden der Seite nur unnötig.
Außerdem wird der Container bei deaktiviertem JavaScript nicht nur einfach ausgeblendet, sondern erst gar nicht generiert.


Also, wenn du deinen Inhalt für jeden User zugänglich machen möchtest, dann behalte besser die standardmäßige Anwendung bei.
Wenn du doch lieber das vorherige Erscheinen verhindern möchtest, dann bediene dich der zweiten Möglichkeit.
Evtl. kannst du dann einen Hinweis ausgeben, dass alles nur bei aktiviertem Javascript funktioniert.
Oder du kopierst den Container vorsichtshalber nochmal in NoScript-Tags dahinter, was aber technisch etwas unschön/unsauber wäre.


Du siehst also, im Web hat man die Qual der Wahl.

#5 RE: Div durch Link mit Cookie ausblenden von toggodamian 13.10.2011 23:32

avatar

Hallo Florian,
Da das ein Inhalt sein sollte ohne text eigentlich und es recht groß ist, ist mir es doch lieber wen es standardmäßig ausgebeldet ist und dann erst sich zeigt.

Danke, für den sehr Informativen Beitrag. Ich habe mich für die zweite Methode von drei entschiden wie man oben ja gut den grund erfährt.

Vielen Dank für das gute Script!
Deine arbeit machst du sehr gut ich bin beeindruckt!
mfg,
Damian

Xobor Forum Software von Xobor
Einfach ein eigenes Forum erstellen
Datenschutz