Anzeige

Js, helft mir mal grad auf die Sprünge

Js, helft mir mal grad auf die Sprünge | PSD-Tutorials.de

Erstellt von Refus, 26.05.2008.

  1. Refus

    Refus aka Noisy

    Dabei seit:
    16.03.2006
    Beiträge:
    900
    Geschlecht:
    männlich
    Ort:
    Frankfurt
    Kameratyp:
    Canon 550D
    Js, helft mir mal grad auf die Sprünge
    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:
    1.  
    2. <script language = "Javascript" type="text/javascript">
    3.     function change(color) {
    4.        
    5.         document.cookie = 'bgcolor = '+ color +';';
    6.        
    7.         document.getElementById("body").style.backgroundColor = color;
    8.         document.getElementById("sendbutton").style.backgroundColor = color;
    9.     }  
    10.    
    11.     if(document.cookie) {
    12.         document.getElementById("body").style.backgroundColor = document.cookie.bgcolor;
    13.     }
    14.     </script>
    15.  
     
    Zuletzt bearbeitet: 26.05.2008
    #1      
  2. Pisi2008

    Pisi2008 Guest

    Js, helft mir mal grad auf die Sprünge
    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 (Text):
    1.  
    2. <body [COLOR=SeaGreen]id="body"[/COLOR]>
    3. <input type="button" value="ChangeColor" [COLOR=Red]onclick="change('#000000');"[/COLOR]>
    4. <input type="button" value="Absenden" [COLOR=SeaGreen]id="sendbutton"[/COLOR]>
    5. </body>
    6.  
    Vielleicht hast du in deinem Aufruf oder im HTML ja einen Fehler.
     
    #2      
  3. Refus

    Refus aka Noisy

    Dabei seit:
    16.03.2006
    Beiträge:
    900
    Geschlecht:
    männlich
    Ort:
    Frankfurt
    Kameratyp:
    Canon 550D
    Js, helft mir mal grad auf die Sprünge
    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 (Text):
    1.  
    2. document.getElementById("sendbutton") has no properties
    3. change("#FFFFFF")
    4. document.getElementById("sendbutton").style.backgroundColor = color;
    5.  
    Aber die Farben ändern sich, nur der verdammte Cookie wird nicht gesetzt.
     
    #3      
  4. Pisi2008

    Pisi2008 Guest

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

    So funktionert es:

    Code (Text):
    1.  
    2. <script language = "Javascript" type="text/javascript">
    3.     function change(color) {
    4.        
    5.         document.cookie = 'bgcolor='+ color +';';
    6.        
    7.         document.getElementById("body").style.backgroundColor = color;
    8.         document.getElementById("sendbutton").style.backgroundColor = color;
    9.     }    
    10.  
    11.     function suche_cookie() {
    12.         if(document.cookie) {
    13.             cookiewerte = document.cookie.split("=")
    14.             document.getElementById("body").style.backgroundColor = cookiewerte[1];
    15.         }
    16.     }
    17.     </script>
    18.  
    19.  
    20.    
    21. <body id="body" onload="suche_cookie();">
    22. <input type="button" value="ChangeColor" onclick="change('#000000');">
    23. <input type="button" value="Absenden" id="sendbutton">
    24. </body>
    25.  
    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 von einem Moderator bearbeitet: 30.05.2008
    #4      
  5. sokie

    sokie Mod | Web

    Dabei seit:
    23.03.2008
    Beiträge:
    5.338
    Geschlecht:
    männlich
    Ort:
    Bünde NRW
    Software:
    <br>COREL <br> Texteditor
    Js, helft mir mal grad auf die Sprünge
    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 (Text):
    1.  
    2. <title>farbewechseln</title>
    3. <script type="text/javascript">
    4. function wechsle(){
    5.   document.getElementsByTagName("body")[0].className = "gefaerbt";
    6.   window.name="gefaerbt";
    7. }
    8. function beimLaden(){
    9.   document.getElementsByTagName("body")[0].className = window.name;
    10. }
    11. </script>
    12. <style>
    13. .gefaerbt{
    14.   background: #000000;
    15. }
    16.  
    17. </style>
    18. </head>
    19.  
    20. <body onload="beimLaden()">
    21. <input type="button" value="ChangeColor" onclick="wechsle();">
    22. <input type="button" value="Absenden" id="sendbutton">
    23. </body>
    24.  
     
    Zuletzt bearbeitet: 30.05.2008
    #5      
  6. Refus

    Refus aka Noisy

    Dabei seit:
    16.03.2006
    Beiträge:
    900
    Geschlecht:
    männlich
    Ort:
    Frankfurt
    Kameratyp:
    Canon 550D
    Js, helft mir mal grad auf die Sprünge
    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
     
    #6      
  7. Duddle

    Duddle Posting-Frequenz: 14µHz

    Dabei seit:
    03.02.2006
    Beiträge:
    3.864
    Geschlecht:
    männlich
    Ort:
    Dresden
    Js, helft mir mal grad auf die Sprünge
    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 SELFHTML beschriebene Verhalten zitieren, mglw. trifft es ja bei dir zu:
    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: 30.05.2008
    #7      
  8. sokie

    sokie Mod | Web

    Dabei seit:
    23.03.2008
    Beiträge:
    5.338
    Geschlecht:
    männlich
    Ort:
    Bünde NRW
    Software:
    <br>COREL <br> Texteditor
    Js, helft mir mal grad auf die Sprünge
    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.
     
    #8      
  9. Refus

    Refus aka Noisy

    Dabei seit:
    16.03.2006
    Beiträge:
    900
    Geschlecht:
    männlich
    Ort:
    Frankfurt
    Kameratyp:
    Canon 550D
    Js, helft mir mal grad auf die Sprünge
    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: 30.05.2008
    #9      
  10. Duddle

    Duddle Posting-Frequenz: 14µHz

    Dabei seit:
    03.02.2006
    Beiträge:
    3.864
    Geschlecht:
    männlich
    Ort:
    Dresden
    Js, helft mir mal grad auf die Sprünge
    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 (Text):
    1. cookiewerte = document.cookie.split("=")
    ein Semikolon fehlt. Und dass in document.cookie zumindest bei mir steht
    Code (Text):
    1. 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
     
    #10      
  11. Refus

    Refus aka Noisy

    Dabei seit:
    16.03.2006
    Beiträge:
    900
    Geschlecht:
    männlich
    Ort:
    Frankfurt
    Kameratyp:
    Canon 550D
    Js, helft mir mal grad auf die Sprünge
    AW: Js, helft mir mal grad auf die Sprünge

    Na gut, jetzt funktioniert es.
    Danke euch :)
     
    #11      
  12. sokie

    sokie Mod | Web

    Dabei seit:
    23.03.2008
    Beiträge:
    5.338
    Geschlecht:
    männlich
    Ort:
    Bünde NRW
    Software:
    <br>COREL <br> Texteditor
    Js, helft mir mal grad auf die Sprünge
    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
     
    #12      
  13. Refus

    Refus aka Noisy

    Dabei seit:
    16.03.2006
    Beiträge:
    900
    Geschlecht:
    männlich
    Ort:
    Frankfurt
    Kameratyp:
    Canon 550D
    Js, helft mir mal grad auf die Sprünge
    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.
     
    #13      
  14. sokie

    sokie Mod | Web

    Dabei seit:
    23.03.2008
    Beiträge:
    5.338
    Geschlecht:
    männlich
    Ort:
    Bünde NRW
    Software:
    <br>COREL <br> Texteditor
    Js, helft mir mal grad auf die Sprünge
    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.
     
    #14      
x
×
×