Arno Fassbender: event - IE - Verständnisproblem

Hallo,

warum funktioniert folgender Code im Internet Explorer nicht ? (im Firefox funktioniert er, andere habe ich nicht getestet)

<html>
<head>
<script type="text/javascript">
document.onclick  = new Function("alert('Erfolg');");
</script>
</head>
<body>
<div>hallo</div>
</body>
</html>

Es erfolgt keine Ausgabe.
Der Code funktioniert, wenn ich die Zeile
<div>hallo<div>
in
<div></div>
umwandle, also das <div>-Element leer lasse. Was hat das <div> mit dem Eventhandling zu tun ? Ich kann dem Element auch css-Klassen zuweisen z.B.
<div class="bgcenter"></div>
nur eben keinen Text...

Das Kapitel über events ist mir bekannt, ich nutze das Forum schon länger (als "Leser") und es hat mir bis jetzt fast immer weitergeholfen. Aber jetzt finde ich auch sonst nirgendwo eine Erklärung. Wäre nett, wenn mir jemand weiterhelfen könnte.

Auch für Antworten der Art "Du bist trotzdem zu blöd, schau mal hier" wäre ich dankbar :-)

Danke und Gruß,
Arno

  1. Liebe(r) Arno,

    warum funktioniert folgender Code im Internet Explorer nicht ?

    ich kann sowohl im IE6, als auch im IE5.5 irgendwo im Dokument klicken und erhalte den alert. Daher kann ich Dein Problem nicht nachvollziehen...

    Das nächste Mal schreibst Du Dein Javascript aber besser so:

    document.onclick = function () { alert("Erfolg!"); };

    Der Unterschied ist der, dass in meinem Code eine "echte" Funktion dem onclick-Ereignis zugewiesen wird, in Deinem Beispiel aber nur eine Art "Pseudo-Funktion" definiert wird (Deine Funktion enthält keinen Code!), der zu allem Überfluss auch noch ein sehr seltsam notierter Wert übergeben wird (das in Deiner Funktionsklammer), der als "Rückgabewert" des alert-Statements ermittelt wird. Deswegen kommt Deine Erfolgsmeldung zwar trotzdem, aber um Deinen Code zu verstehen, muss man gehörig um drei Ecken denken!

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. Hallo Felix,

      danke für Deine Antwort.

      » Liebe(r) Arno,

      Arno ist in der Tat ein männlicher Vorname :-)

      ich kann sowohl im IE6, als auch im IE5.5 irgendwo im Dokument klicken und erhalte den alert. Daher kann ich Dein Problem nicht nachvollziehen...

      Tja, das ist seltsam. Ich habe es im IE6 probiert. Wenigstens weiss ich jetzt, dass es wohl irgendwie an meinem Rechner liegen muss und nicht am Code selbst. Ich werde es mal an einem anderen probieren.

      Das nächste Mal schreibst Du Dein Javascript aber besser so:

      document.onclick = function () { alert("Erfolg!"); };

      Der Unterschied ist der, dass in meinem Code eine "echte" Funktion dem onclick-Ereignis zugewiesen wird, in Deinem Beispiel aber nur eine Art "Pseudo-Funktion" definiert wird (Deine Funktion enthält keinen Code!), der zu allem Überfluss auch noch ein sehr seltsam notierter Wert übergeben wird (das in Deiner Funktionsklammer), der als "Rückgabewert" des alert-Statements ermittelt wird. Deswegen kommt Deine Erfolgsmeldung zwar trotzdem, aber um Deinen Code zu verstehen, muss man gehörig um drei Ecken denken!

      Bist Du Dir da sicher ? Meines Wissens nach erhält der Konstruktor eines Funktion-Objekts eine Reihe von Argumenten, wobei das Letzte den Funktionsrumpf repräsentiert. Da es hier nur ein Argument gibt, enthält dieses den Funktionsrumpf. Die neue Funktion hat also keine Parameter, ist also genau genommen eine Prozedur. Siehe z.B. hier:

      http://www.devguru.com/Technologies/ecmascript/quickref/function_object.html

      Danke und Gruß
      Arno

      1. Lieber Arno,

        » Liebe(r) Arno,

        sorry, das war eine korrektur des Default-Wertes zu wenig...

        Wenigstens weiss ich jetzt, dass es wohl irgendwie an meinem Rechner liegen muss und nicht am Code selbst. Ich werde es mal an einem anderen probieren.

        Oh je. Das sind immer die schönsten Fehler, wenn es nicht am Code liegt!

        document.onclick = function () { alert("Erfolg!"); };

        http://www.devguru.com/Technologies/ecmascript/quickref/function_object.html

        Naja, da habe ich jetzt schon wieder etwas dazu gelernt. Und wenn es auch nur dieser Satz in dem von Dir verlinkten Artikel ist:

        When a Function object is created by using the Function constructor, it is evaluated each time. This is not as efficient as the alternative method of declaring a function using the function statement where the code is compiled.

        Nach wie vor habe ich aber das Gefühl, dass ich die von mir angeführte Schreibweise schneller lesen und begreifen kann... aber das ist wohl bei jedem anders.

        Liebe Grüße aus Ellwangen,

        Felix Riesterer.

        --
        ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
        1. Hallo Felix,

          Oh je. Das sind immer die schönsten Fehler, wenn es nicht am Code liegt!

          Kein Kommentar :-)

          Naja, da habe ich jetzt schon wieder etwas dazu gelernt. Und wenn es auch nur dieser Satz in dem von Dir verlinkten Artikel ist:

          When a Function object is created by using the Function constructor, it is evaluated each time. This is not as efficient as the alternative method of declaring a function using the function statement where the code is compiled.

          Nach wie vor habe ich aber das Gefühl, dass ich die von mir angeführte Schreibweise schneller lesen und begreifen kann... aber das ist wohl bei jedem anders.

          Hm, eigentlich gebe ich Dir da Recht, beim Arbeiten mit DOM hat sich diese Version für mich aber als angenehmer herausgestellt. Wenn ich mal 3D-rendering im Browser mache, werde ich Deine Version verwenden, versprochen :-)

          Nochmal Danke für Deine Hilfe,
          Schönen Feiertag noch !
          Arno