Antworten auf deine Fragen:
Neues Thema erstellen

Antworten zum Thema „Js, helft mir mal grad auf die Sprünge“

Refus

aka Noisy

JavaScript Cookies setzen/auslesen

Also ich hab mir hier so ein kleines JavaScript zusammen gebastelt, dass den Hintergrund ändert, eine kleine Spielerei, also ich setze das sicher nicht mit PHP um.

Mit zwei Buttons kann man die Farbe ändern. Der Farbcode wird in der Funktion mitgeliefert. Funktioniert auch soweit wunderbar, jetzt will ich aber einen Cookie setzen, damit wenn man die Farbe einmal gewechselt hat sie sich beim Seiten refresh o.ä. nicht verändert.
Das Script sieht wie folgt aus, funktionieren tut es allerdings nicht.
HTML:
<script language = "Javascript" type="text/javascript">
	function change(color) {
		
		document.cookie = 'bgcolor = '+ color +';'; 
		
		document.getElementById("body").style.backgroundColor = color;
		document.getElementById("sendbutton").style.backgroundColor = color;
	}	
	
	if(document.cookie) {
		document.getElementById("body").style.backgroundColor = document.cookie.bgcolor;
	}
	</script>
 
Zuletzt bearbeitet:
P

Pisi2008

Guest

AW: Js, helft mir mal grad auf die Sprünge

Ich habe dein Script mal bei mir ausprobiert und wenn ich den
Aufruf folgendermaßen mache, dann geht es bei mir.

Code:
<body [COLOR=SeaGreen]id="body"[/COLOR]>
<input type="button" value="ChangeColor" [COLOR=Red]onclick="change('#000000');"[/COLOR]>
<input type="button" value="Absenden" [COLOR=SeaGreen]id="sendbutton"[/COLOR]>
</body>
Vielleicht hast du in deinem Aufruf oder im HTML ja einen Fehler.
 

Refus

aka Noisy

AW: Js, helft mir mal grad auf die Sprünge

Das mit dem Hintergrund veränder funktioniert auch.
Die Funktion wird also aufgerufen. Mein eigentliches versagen bezieht sich auf den Cookie, der soll gesetzt werden, auf die Farbe, die der Anwender ausgewählt hat. Um dann beim nächsten Seitenaufruf auch z.b. schwarz zu bleiben und nicht wieder in weiß zu wechseln.
Aber das funktioniert nicht.

Firebug gibt mir folgenden Fehler aus beim Ausführen der Funktion:
Code:
document.getElementById("sendbutton") has no properties
change("#FFFFFF")
document.getElementById("sendbutton").style.backgroundColor = color;
Aber die Farben ändern sich, nur der verdammte Cookie wird nicht gesetzt.
 
P

Pisi2008

Guest

AW: Js, helft mir mal grad auf die Sprünge

So funktionert es:

Code:
<script language = "Javascript" type="text/javascript">
    function change(color) {
        
        document.cookie = 'bgcolor='+ color +';'; 
        
        document.getElementById("body").style.backgroundColor = color;
        document.getElementById("sendbutton").style.backgroundColor = color;
    }    

    function suche_cookie() {
        if(document.cookie) {
            cookiewerte = document.cookie.split("=")
            document.getElementById("body").style.backgroundColor = cookiewerte[1];
        }
    }
    </script>


    
<body id="body" onload="suche_cookie();">
<input type="button" value="ChangeColor" onclick="change('#000000');">
<input type="button" value="Absenden" id="sendbutton">
</body>
Durch das "onLoad"-Ereignis wird der Cookie erst kontrolliert wenn das BODY-Element auch existiert, sonst führt es immer zu dem Fehler: "body is not defined".

Außerdem steht in dem Cookie: background=#000000. Deshalb habe ich den Cookie gesplittet, so habe ich im Array "cookiewerte":

[0]->background
[1]->#000000
 
Zuletzt bearbeitet von einem Moderator:

sokie

Mod | Web

AW: Js, helft mir mal grad auf die Sprünge

statt eines Cookies kannst du den wert auch in der eingenschaft name im window objekt speichern:
Code:
<title>farbewechseln</title>
<script type="text/javascript">
function wechsle(){
  document.getElementsByTagName("body")[0].className = "gefaerbt";
  window.name="gefaerbt";
}
function beimLaden(){
  document.getElementsByTagName("body")[0].className = window.name;
}
</script>
<style>
.gefaerbt{
  background: #000000;
}

</style>
</head>

<body onload="beimLaden()">
<input type="button" value="ChangeColor" onclick="wechsle();">
<input type="button" value="Absenden" id="sendbutton">
</body>
 
Zuletzt bearbeitet:

Refus

aka Noisy

AW: Js, helft mir mal grad auf die Sprünge

Ok, das mit dem Cookie funktioniert schonmal, halb.
Das mit window funktioniert gar nicht, da wird nichts gespeichert.

Bei 3/5 der Seiten bleibt der Hintergrund schwarz, bei 2/5 weiß, also wenn ich den Cookie auf schwarz setze. Setze ich den Cookie, dann auf einer schwarzen Seite wieder weiß, dann wird er auf dieser un den zwei anderen Seitenauch weiß angezeigt, bei den zwei vorher schon schwarzen wirkt das nicht. In Opera kommen ganz abenteuerliche Sachen wie ein beiger Hintergrund raus o0.

Ihr könnt ja mal drüber gucken, wo noch ein Fehler liegen könnte, aber das lässt mich echt verzweifeln. dp-k.com
 

Duddle

Posting-Frequenz: 14µHz

AW: Js, helft mir mal grad auf die Sprünge

Prinzipiell ist schon alles richtig gesagt worden:
a) musst du das Laden des Cookies als Event einführen (schöner ist es übrigens hier beschrieben)
b) muss der Wert richtig extrahiert werden, ein "document.cookie.bgcolor" funktioniert nicht, da du keinen echten Kindknoten im DOM namens "bgcolor" hast, sondern nur einen String der zufällig den Teilstring "bgcolor" enthält

Zu deinem Problem in Opera würde ich einfach mal das in beschriebene Verhalten zitieren, mglw. trifft es ja bei dir zu:
Opera bis Version 6 erlaubt kein Setzen von Cookies im Protokoll file://, also beim Aufrufen von HTML-Dateien mit JavaScript direkt von der Festplatte.

Edit: ich habe gerade entdeckt, dass du ja noch die URL der betroffenen Seite angefügt hast und laut meinem Cookie-Editor wird auf jeder Seite ein neuer Cookie gesetzt, der mit dem Unterpfad zusammenhängt. Wie man das löst, weiss ich jetzt aber auch nicht ;)

Edit 2: Probier es mal wie hier beschrieben und häng noch ein ";path=/;" an den Cookie dran. Dann soll er angeblich für die ganze Domain gelten.
Duddle
 
Zuletzt bearbeitet:

sokie

Mod | Web

AW: Js, helft mir mal grad auf die Sprünge

tja, da habe ich auch keine Erklärung, warum es bei dir gar nicht, bei mir in allen Browsern funktioniert.
 

Refus

aka Noisy

AW: Js, helft mir mal grad auf die Sprünge

Ok, mit dem path=/; speichert er nichts mehr.
Ich bin etwas verwirrt, das wäre echt miserabel wenn das heute nicht mehr klappen würde geschweige den was passiert, wenn ich dafür gar keine Lösung mehr finde :/+

guck mal im Opera, da wird man am Anfang mit einem eklichen grünen Hintergrundfarbe überrascht oder lila, das find ich absurd o0
 
Zuletzt bearbeitet:

Duddle

Posting-Frequenz: 14µHz

AW: Js, helft mir mal grad auf die Sprünge

Lern mal das Debuggen. Vorallendingen lass dir Variablen zwischendurch ausgeben, bzw. Marken, damit du siehst wo das Script steht.
So fällt mir direkt auf, dass hinter
Code:
cookiewerte = document.cookie.split("=")
ein Semikolon fehlt. Und dass in document.cookie zumindest bei mir steht
Code:
PHPSESSID=bd118adee06afd549f4eb2e19583a90f; bgcolor=#000000
Somit stehen nach dem Split 3 Elemente im Array und [1] wird auf den mittleren Teil zugreifen. Das würde auch die bunten Farben erklären.

Weiterhin wirft Firebug mir bei jedem Aufruf der Cookie-Funktion einen Fehler, weil er dieses "sendbutton" nicht kennt. Fehler sind meist Ursachen für weitere Fehler.
Als letztes ist auch anzumerken, dass #body von haus aus keine Hintergrundfarbe gegeben wird, es also am Browser liegt wie er den Stil initial zu bewerten hat. Das Ändern einer nicht-vorhandendenen Eigenschaft sollte einen neuer Browser zwar nicht mehr ins Wanken bringen, aber man muss es ja nicht drauf ankommen lassen.


Duddle
 

sokie

Mod | Web

AW: Js, helft mir mal grad auf die Sprünge

schön, dass es nun klappt.
nach den Letzten Posts bin ich aber doch einigermassen verwirrt.
Du hast zwar oben geschrieben, dass du es nicht mit PHP machen willst - wäre aber wahrscheinlich viel schneller gegangen, grad wo du scheinbar schon sessions verwendest.
Eigentlich sollte man es nicht clientseitig lösen, wenn es serverseitig sicherer gelöst werden kann.
nur mal meine Gedanken
 

Refus

aka Noisy

AW: Js, helft mir mal grad auf die Sprünge

Ist nurn kleines Gimmick. Das ganze passiert in Wordpress, daher ist schon eine Session gesetzt. Ich wollte, dass die Seite schwarz wird, wenn man direkt drauf klickt und nicht nochmal neu lädt. Wenn man sich z.B. Fotos ansieht und dann mal den Hintergrund wechseln will, dann muss man wieder das Foto raus finden (oder sich vorher gemerkt haben) wo man war. Und zu guter letzt: Wunsch des Webseitenbetreibers.
 

sokie

Mod | Web

AW: Js, helft mir mal grad auf die Sprünge

achso.
jedenfalls habe ich das auch gern Fotos vor einem dunklen Hintergrund anzsehen.
ob nun so oder so, ich finde die Idee gut.
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Statistik des Forums

Themen
175.182
Beiträge
2.582.043
Mitglieder
67.255
Neuestes Mitglied
Bitterlimoni
Oben