Hamster: document.write

Hallo,
ich versuche mich gerade an javascript und habe folgendes probiert:

<SELECT>

<OPTION value = "test2">leer</OPTION>
<OPTION value = "test" onclick = "var test = 1;alert('Juhu');">Test</OPTION>

</SELECT>

<SCRIPT type = "text/javascript" language = "javascript">

if (test == 1)
        {
         document.write('Juhu');
        }

</SCRIPT>

Den Alert bringt er mir nach der Auswahl auch, aber er schreibt das Juhu nicht hin :-(

Ich habe auch schon probiert das jeweils in ' oder " zu fassen (also z.B. if (test == "1"), aber das geht auch nicht...

Weiss jemand wo mein Fehler liegt?

Danke :-)

  1. Hi,

    <OPTION value = "test2">leer</OPTION>

    Du   hast   eine   sehr   merkwürdige   Art ,   Leerzeichen   zu   setzen .

    Den Alert bringt er mir nach der Auswahl auch, aber er schreibt das Juhu nicht hin :-(

    Der Code wurde ja auch sehr viel früher abgearbeitet, als noch nicht mal eine Variable namens "test" existierte - Jahrzehnte vor dem Klick nämlich. Darüber hinaus sind Variablen nur innerhalb ihres Scopes gültig; deklarierst Du sie also im Event-Handler, wirst Du sie außerhalb desselben eh nicht finden.

    Weiss jemand wo mein Fehler liegt?

    In der Hoffnung auf Magie. Es wird nicht plötzlich Code ausgeführt, nur weil er irgendwo existieren mag.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hallo erstmal und danke für deine Antwort :-)

      Der Code wurde ja auch sehr viel früher abgearbeitet, als noch nicht mal eine Variable namens "test" existierte - Jahrzehnte vor dem Klick nämlich. Darüber hinaus sind Variablen nur innerhalb ihres Scopes gültig; deklarierst Du sie also im Event-Handler, wirst Du sie außerhalb desselben eh nicht finden.

      hab ich verstanden.
      Aber wenn ich im Event-Handler direkt ein if ... document.write() mache, kann ich doch nicht kontrollieren, wo er das hinschreibt in der Seite.

      Und wenn ich im Handler eine Variable "ausgabe" erstelle und die dann nachher an der richtigen Stelle per <Script> document.write() mache ist ja wieder das Problem, dass zum Zeitpunkt der Ausführung des Scriptes die Variable noch nicht existiert hat :-(

      Kannst du mir vllt. einen Denkanstoß geben, wie ich das lösen könnte?
      Danke :-)

      1. Hallo,

        wenn du, _nachdem_ die Seite geladen wurde dynamisch Texte mit Javascript ausgeben willst, wirst du wohl um das document object model nicht herumkommen.
        Wenn du zum Beispiel in einem HTML-Bereich folgendes schreibst:

          
        <p id="ausgabebereich"></p>  
        
        

        könntest du in einem Skript Bereich (am besten schon im HEAD des Dokumentes) eine Funktion definieren

          
        function ausgabe(text)  
        {   document.getElementById("ausgabebereich").appendChild(document.createTextNode(text));  
        }  
        
        

        und die kannst du jetzt in deinem onclick-event aufrufen

          
        <OPTION value ="test" onclick="ausgabe('Juhu');">Test</OPTION>  
        
        

        Ich hab das ganze mal als Beispiel hochgeladen. Ist natürlich alles noch sehr verbesserungswürdig, aber deswegen heißt das hier ja _SELF_HTML (zum Beispiel wird die Funktion mit einer unschönen Fehlermeldung aussteigen, falls der Absatz mit der richtigen id nicht existiert; außerdem klatscht die Funktion beim zweiten Aufruf ein zweites juhu direkt hinter das erste, usw, usw - du kannst also noch eine Menge rumexperimentieren und verbessern :-) )

        liebe Grüße mbr

        1. Hallo,
          vielen Dank für diese Antwort, hat mir sehr geholfen :-)
          Hamster

      2. Hi,

        Aber wenn ich im Event-Handler direkt ein if ... document.write() mache, kann ich doch nicht kontrollieren, wo er das hinschreibt in der Seite.

        Du hast exakt die selbe Kontrolle wie sonst auch bei document.write(): Der Code wird an genau die Stelle geschrieben, an der sich das Rendering gerade befindet. Nach Abschluss des Renderings also in ein neues, leeres Dokument.

        Und wenn ich im Handler eine Variable "ausgabe" erstelle und die dann nachher an der richtigen Stelle per <Script> document.write() mache ist ja wieder das Problem, dass zum Zeitpunkt der Ausführung des Scriptes die Variable noch nicht existiert hat :-(

        Den Scope der Variable kannst Du festlegen. Du kannst nicht die Verarbeitung von Programmlogik festlegen, und Du kannst nicht das Verhalten von document.write() festlegen. Wenn Dein Code geklappt hätte, wäre das Ergebnis vermutlich am weitesten von dem entfernt gewesen, was Du vorhattest.

        Kannst du mir vllt. einen Denkanstoß geben, wie ich das lösen könnte?

        Beschäftige Dich mit den Dokumentobjektmodellen.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
    2. Hello out there!

      Du   hast   eine   sehr   merkwürdige   Art ,   Leerzeichen   zu   setzen .

      Du plenkst. >;-)

      Naja, es mag unüblich sein, zwischen Attributname und -wert außer dem '=' noch Leerzeichen zu setzen; falsch ist es nicht:

      Start-Tag

      [40] STag      ::= '<' Name (S Attribute)* S? '>'

      [41] Attribute ::= Name Eq AttValue

      [25] Eq        ::= S? '=' S?

      [3]  S         ::= (#x20 | #x9 | #xD | #xA)+

      [XML] Das dürfte auch für SGML, also auch für HTML gelten.

      See ya up the road,
      Gunnar

      --
      “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)
      1. Hi,

        Du plenkst. >;-)

        <Loriot>Ach. Ach was.</Loriot> ;-)

        Naja, es mag unüblich sein, zwischen Attributname und -wert außer dem '=' noch Leerzeichen zu setzen; falsch ist es nicht:

        Gunnar, Du kennst mich. Wenn ich gemeint hätte, dass es falsch ist, hätte ich dann gesagt, es sei merkwürdig? Na also.

        Cheatah :-)

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. Hallo Cheatah,

          Gunnar, Du kennst mich.

          Erspere uns unflätige Beschimpfungen.

          Grüße
           Roland

          1. Hallo,

            Erspere uns unflätige Beschimpfungen.

            Gucky würde sagen: "Du hast da ein 'r' zuviel drin." ;-)

            viele Grüße

            Axel