Ikaros: className macht Probleme / weis nicht weiter

Hi :-)

Das ist mein erster Post in diesem Forum. Ich habe vorher ungefähr
zwei Stunden gegoogelt(was für ein Neologismus:-) und ich habe die
foreneigene Suchfunktion benutzt. Leider brachte mich das alles
nicht weiter.

Mein Problem bezieht sich auf die Eigenschaft className
(http://de.selfhtml.org/javascript/objekte/all.htm#class_name);
sobald ich diese Eigenschaft berühre führt mein Browser kein JS mehr aus.

Also zu besseren Verständnis hier meine Datei: #######################

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<head>
 <meta http-equiv="Content-type" content="text/html; charset=utf-8">
 <title>Test</title>
 <style type="text/css" media="screen">
  .test{
   color:red;
   font-size: 30pt;
  }
 </style>
 <script type="text/javascript" charset="utf-8">
  document.getElementById("test_id").className = "test";
  alert("done");
 </script>
</head>
<body>
 <div id="test_id">
  test
 </div>
</body>

######################################################################

Er führt das Script nicht aus sobald etwas von "className" erwähnt
wird. Falls es wichtig für eine Diagnose ist, ich habe Mac Os Tiger
und verwende FireFox. Das dürfte aber keinen einfluss auf
JS-Interpretation haben.

Ich bin um jede Antwort froh :-)

M.f.G.
Ikaros

  1. Wie wäre es, dein Skript auch auszuführen?
    Packe es in eine funktion und rufe diese mittels onload event-handler auf.

    1. Wie wäre es, dein Skript auch auszuführen?
      Packe es in eine funktion und rufe diese mittels onload event-handler auf.

      Zuerst mal danke für deine Antwort :-)

      Das habe ich schon probiert das ist leider garnicht Gegenstand meines
      Problems. Das Script wird ausgeführt. Deine Variante hatte ich schon
      probiert ^^Klar ist meine gerade etwas unsauber :-) D

      1. hi,

        Das habe ich schon probiert das ist leider garnicht Gegenstand meines
        Problems. Das Script wird ausgeführt.

        _Das_ ist Gegenstand deines Problems - es wird zu früh ausgeführt, siehe meine andere Antwort.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Ich weis es inzwischen ;-) Danke nochmal.

          Die Resonanz hier is einfach zu schnell für meine Finger:-)

  2. hi,

    Mein Problem bezieht sich auf die Eigenschaft className
    (http://de.selfhtml.org/javascript/objekte/all.htm#class_name);
    sobald ich diese Eigenschaft berühre führt mein Browser kein JS mehr aus.

    Das dürfte mit dieser spezielle Eigenschaft wenig zu tun haben.

    <script type="text/javascript" charset="utf-8">
      document.getElementById("test_id").className = "test";

    Zu diesem Zeitpunkt gibt es noch gar kein Element mit einer ID "test_id".
    getElementById kann als nur NULL zurückliefern - und NULL hat nun wirklich keine Eigenschaft className.
    Das hätte dir die Fehlerkonsole deines Browsers aber auch sagen können.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
  3. Hi,

    Also zu besseren Verständnis hier meine Datei: #######################

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8">
    <title>Test</title>
    <style type="text/css" media="screen">
      .test{
       color:red;
       font-size: 30pt;
      }
    </style>
    <script type="text/javascript" charset="utf-8">
      document.getElementById("test_id").className = "test";
      alert("done");
    </script>

    Hier gibt es das Element mit der ID test_id noch nicht, da die Seite mit dem Laden noch nicht so weit ist.

    </head>
    <body>
    <div id="test_id">
      test
    </div>
    </body>

    ######################################################################

    Er führt das Script nicht aus sobald etwas von "className" erwähnt
    wird. Falls es wichtig für eine Diagnose ist, ich habe Mac Os Tiger
    und verwende FireFox. Das dürfte aber keinen einfluss auf
    JS-Interpretation haben.

    Aber der FF bietet eine Javascript-Fehlerkonsole an, die dir Fehler anzeigt. So steht bei deinem Script 'document.getElementById("test_id") has no properties'.
    Das heisst, dass zu dem Zeitpunkt, wo es aufgerufen wird, es das Element mit der ID "test_id" noch nicht gibt. Es hat nichts mit className zu tun.

    Du solltest dein Script in eine Funktion packen und es mit onload (im body-Tag) aufrufen.
    Die zweite (wie ich finde nicht so schoene) Moeglichkeit waere, das Script nach dem Div im Quellcode zu platzieren.

    mfG,
    steckl

    1. Vielen Dank für deine konstruktive Hilfe Steckl :-)

    2. Hello out there!

      Du solltest dein Script in eine Funktion packen und es mit onload (im body-Tag) aufrufen.

      Nö, sondern Markup und Script sauber getrennt halten. [molily]

      Im Script (nicht im HTML) für das Event die Aktion angeben:

      window.onload = setClass;  
        
      function setClass()  
      {  
        document.getElementById("test_id").className = "test";  
      }
      

      oder mit anonymer Funktion:

      window.onload = function ()  
      {  
        document.getElementById("test_id").className = "test";  
      };
      

      See ya up the road,
      Gunnar

      PS: @Ikaros:

      <script type="text/javascript" charset="utf-8">

      In der HTML-4.01-DTD [HTML401 §22] steht dazu:

      <!ATTLIST SCRIPT
        charset     %Charset;      #IMPLIED  -- char encoding of linked resource --

      Du hast hier keine verlinkte Ressource (externes Script); die 'charset'-Angabe ist wohl sinnfrei.

      --
      „Wer Gründe anhört, kommt in Gefahr nachzugeben.“ (Goethe)
      1. Klar hast du recht ;-)
        Darauf hab ich nur ned geachtet^^
        Das gibts bei meinem Editor nur gratis dazu:-)
        Den kann ich übrigends allen Macianern nur sehr weiterempfehlen.
        www.macromates.com

        thx,
        Ikaros