Don: styleswitcher

hallo zusammen. bin blutiger anfänger und versuche einen styleswitcher in meine site einzubauen. hat am anfang auch geklappt. hab dann aber was probiert und meinen code vebockt. es ist nur ein klitze kleiner fehler oder 100 (hatte doch schon gesagt ich bin bluttiger anfäänger, oder?). also:

//eine meiner css-dateien die importiert werden soll.
// name:default.css:

div.einstellungen {font-size:14pt; margin:1em; width:50em; height:2em; position:static;}
ul.navigation {font-size:14pt; margin:0em; width:10em; height:50em; float:left;}
div.Inhalt {font-size:14pt; margin:0em; width:30em; position:static;}

//hier ist die js-funktionen (dankbar von www.thestyleworks.de/tut-//art/style_switcher_1.shtml:

<script type="text/javascript" src="/scripts/styleswitcher.js">
function setActiveStyleSheet(title) {
   var i, a, main;
   for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
     if(a.getAttribute("rel").indexOf("style") != -1
        && a.getAttribute("title")) {
       a.disabled = true;
       if(a.getAttribute("title") == title) a.disabled = false;
     }
   }
}
function getActiveStyleSheet() {
var i, a;
for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
  if(a.getAttribute("rel").indexOf("style") != -1
  && a.getAttribute("title")
  && !a.disabled) return a.getAttribute("title");
  }
  return null;
}
function createCookie(name,value,days) {
  if (days) {
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
  }
  else expires = "";
  document.cookie = name+"="+value+expires+"; path=/";
}
function readCookie(name) {
  var nameEQ = name + "=";
  var ca = document.cookie.split(';');
  for(var i=0;i < ca.length;i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1,c.length);
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
  }
  return null;
}
function getPreferredStyleSheet() {
  var i, a;
  for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
    if(a.getAttribute("rel").indexOf("style") != -1
       && a.getAttribute("rel").indexOf("alt") == -1
       && a.getAttribute("title")
       ) return a.getAttribute("title");
  }
  return null;
}
window.onload = function(e) {
  var cookie = readCookie("style");
  var title = cookie ? cookie : getPreferredStyleSheet();
  setActiveStyleSheet(title);
}
window.onunload = function(e) {
  var title = getActiveStyleSheet();
  createCookie("style", title, 365);
}

//und hier der fehler. er erwartet hier ein object:

<a href="#"
onclick="setActiveStyleSheet('default');
return false;">schwarz weiß</a>

ja ich bin blöd und kann alles 1000 mal besser machen, aber könnt ihr mir sagen was is das problem hier?
danke für alle hilfreichen antworten.
Don

  1. Lieber Don,

    //und hier der fehler. er erwartet hier ein object:

    Das ist keine Fehlermeldung, die wir hier verstehen könnten. Also muss ich raten:

    • Du verwendest den Internet-Explorer?
    • Dein IE gibt seine - wie immer völlig nichtssagende - Fehlermeldung "Objekt erwartet" aus?
    • Du hast zusätzlich keinen "anständigen" Browser (FireFox, Opera), der Dir eine kompetente und hilfreiche Fehlermeldung ausgeben könnte?

    Dann fällt die Hilfestellung sehr schwer. Ich vermute mal, dass an der Stelle

    <a href="#"
    onclick="setActiveStyleSheet('default');
    return false;">schwarz weiß</a>

    die Funktion "setActiveStyleSheet()" noch nicht definiert ist, der IE daher mit Deinem onClick nix anfangen kann. Dagegen spricht allerdings, dass Du Deine Javascript-Funktionen per externer .js-Datei eingebunden hast, sie also im <head> des HTML-Dokumentes eingebunden sind... Ich kann Dir nicht helfen! Möchtest Du bitte mal einen Link zu Deiner Seite posten, damit man sich das mal "in Aktion" ansehen kann?

    im Übrigen möchte ich Dir raten, im onclick-Attribut "return setActiveStyleSheet('default');" zu notieren und in der Funktion am Ende (vor der letzten schließenden geschweiften Klammer!) ein "return false" zu schreiben. Das ist eleganter und kürzer.

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

    1. //und hier der fehler. er erwartet hier ein object:
      Das ist keine Fehlermeldung, die wir hier verstehen könnten. Also muss ich raten:

      • Du verwendest den Internet-Explorer?
      • Dein IE gibt seine - wie immer völlig nichtssagende - Fehlermeldung "Objekt erwartet" aus?
      • Du hast zusätzlich keinen "anständigen" Browser (FireFox, Opera), der Dir eine kompetente und hilfreiche Fehlermeldung ausgeben könnte?

      man hast du recht damit. ich sitze leider bei der arbeit und die seite ist (noch) nicht hochgeladen. aber ich lade mir mal einen von den browsern runter. danke für die inspiration.

      1. Lieber Don,

        mir ist da noch etwas eingefallen.

        Dann fällt die Hilfestellung sehr schwer. Ich vermute mal, dass an der Stelle

        <a href="#"
        onclick="setActiveStyleSheet('default');
        return false;">schwarz weiß</a>
        die Funktion "setActiveStyleSheet()" noch nicht definiert ist, der IE daher mit Deinem onClick nix anfangen kann. Dagegen spricht allerdings, dass Du Deine Javascript-Funktionen per externer .js-Datei eingebunden hast, sie also im <head> des HTML-Dokumentes eingebunden sind...

        Wenn das Einbinden per externer .js-Datei korrekt ist, dann müsste der Browser die Funktion "setActiveStyleSheet" kennen. Das kannst Du ausprobieren, indem Du folgendes (per cut&paste) in die Adresszeile des Browsers eingibst:
        javascript:alert(setActiveStyleSheet);

        Im Dialog-Fenster sollte dann der Quelltext der Funktion erscheinen. Tut er das nicht, dann hast Du einen Fehler in der Zeile, in der Du Deine Javascript-Funkitionen einbindest!

        Liebe Grüße aus Ellwangen,

        Felix Riesterer.

        1. Lieber Felix,
          Du bist ein Gott. Ich war schon so genervt davon. Es war eine falsche Quellenangeabe in dieser berüchtigten Zeile, weil ich die aus dem Original kopiert habe, ohne weiter darauf zu achten.
          Danke,danke,danke.
          MfG,
          Daniel

  2. Das Teil stammt übrigens von  von  Paul Sowden.
    Ich habs aus meinem Fundus ausgegraben und in mein Online-Archiv geladen :
    http://www.landesmutter.de

    Gruß Frodo