Alex: Funktionsaufruf

Hallo,
ich bastele gerade an einem, wie ich finde ziemlich komplexen Script. Dabei ist mir etwas aufgefallen. Hier mal ein vereinfachtes Beispiel:

------------------------------

<html>
<head>
<script>
function test(){
alert("hi");
}

function write(){
document.write("<a href='#' onclick='javascript:test()'>Testlink</a>");
}

</script>
</head>
<body onload="write()">
</body>
</html>

------------------------------

Wenn ich jetzt auf den Link klickt, bekomme ich die Deubber-Information "Objekt erwartet".
Wenn ich die Funktion WRITE() weglasse und den Link mittels document.write schreibe funktioniert es allerdings.
Weiß eventuell jemand wie ich es hinbekommen, dass das script auch mit der WRITE() Funktion funcktioniert?

Danke.

Alex

  1. hi Alex!

    Weiß eventuell jemand wie ich es hinbekommen, dass das script auch mit der WRITE() Funktion funcktioniert?

    was spricht dagegen, die funktion nicht write(), sondern klaus() zu nennen oder mit einem anderen nicht reservierten namen zu versehen?

    prost
    seth

    1. hi!

      was spricht dagegen, die funktion nicht write(), sondern klaus() zu nennen oder mit einem anderen nicht reservierten namen zu versehen?

      bloedsinn! ich bin doof! selbstverstaendlich haben Z.N.S. und Andreas Schneider recht.

      (ich hatte die frage falsch verstanden und auf jene falsch verstandende zusaetzlich noch eine falsche antwort gegeben.)

      prost
      seth

      1. Hallo Jungs,
        erst mal recht herzlichen Dank dafür dass ich mein schönes kleines Beispielscript runtermacht...also bei mir hats funktioniert und die schönheitsfehler sind mir eigenltich egal.Aber jetzt weis ich wenigstens an was es liegt, hab ganz vergessen dass das dokument mit document.write komplett neu geschrieben wird (das kommt wohl davon wenn man stundenlang den fehler sucht, dann verblödet man irgnedwie total). Naja eventuell prober ichs dann mal mit layern.

        und noch was zu benji....woher willst du den wissen dass meine scripts nicht auch seitenlang sind......das heftigeste was ich bis jetzt gemacht hab war 20kb groß.....ok ist nicht die welt, aber egal.

  2. abend,

    schau die mal im browser nach dem seitenaufruf den quelltext an.
    da du mit document.write arbeitest wird der inhalt der seite beim
    aufruf von write() komplett neu geschrieben. danach ist dann also
    die funktion test() logischerweise nicht mehr vorhanden.

    mfg,
    (tanz das)
    Z.N.S.

    --
    <img src="http://www.dmp-web.de/comunicout/neubauten.gif" border="0" alt="">
  3. Hallo Alex !

    ich bastele gerade an einem, wie ich finde ziemlich komplexen Script.

    Das heißt "IMHO" - in my really irgendwas opinion.... Denn dein Script ist wohl nur für Anfänger "komplex". Soll ich dir mal ECHT komplexe Scripts zeigen ? "Normale" komplexe Scripte, mit denen ich arbeite, haben z.B. eine Länge von 2-3 Seiten bei (MS) Word, Standarteinstellungen. Der längste Script an sich, mit dem ich es mal zu tun hatte (natürlich NUR normale simple JavaScripte fürs Web) war 11 Word-Seiten lang. Das ist schon mal was, das bezeichne ich dann als komplex...

    Aber natürlich hat die komplexität eines Scripts nichts mit seiner länge zu tun. In PHP zum Beispiel habe ich auf meinem lokalen Webserver ein Standartseitenvolumen von 7-Word seiten (leere seite natürlich nur!). Das ist alles 1000% PHP-Generiert, selbst das Menü wird bei jedem Seitenaufruf neu zusammengebastelt !
    Auch sowas bezeichne ich als komplex, wenn man dann plötzlich 30 funktionen auf 5Dateien hat, und alle irgendwie miteinander verbunden sind.

    <html>
    <head>
    <script>

    bitte schreibe <script language="JavaScript" type="text/jscript">
    und dann <!-- in die nächste Zeile

    function test(){
    alert("hi");
    }

    function write(){
    document.write("<a href='#' onclick='javascript:test()'>Testlink</a>");

    besser wäre auf jeden Fall, statt der ' sowas " zu machen. Das geht in Strings, indem man sie so schreibt: " also:
       ...write("<a href="#" onclick="javascript:test();">Testlink</a>");

    }
    </script>
    </head>
    <body onload="write()">

    ^^^^^^^...
    ...was es dann auch nicht wirklich bringt ;-)

    </body>
    </html>

    Wenn ich jetzt auf den Link klickt, bekomme ich die Deubber-Information "Objekt erwartet".

    Das Ding heißt "Debugger". Und ja, es gibt so komische Sachen. Echt seltsam. Gestern zum beispiel habe ich einen TOTAL BILLIGEN JavaScript-Ein und ausblender (auf link klicken, absatz erscheint, wieder klicken, weg ist er) für eine Win-Hilfedatei (.chm) gebaut, der hat einfach nicht funktioniert, wenn ich ihn mit <this> gebaut habe ! Das ist total bekloppt, weiß net, wo der Fehler war (die .chm habe ich jetztt auch schon per e-mail abgeschickt, also auch egal - doch, vielleicht poste ich es nochmal gleich, JA, das tue ich). Du kannst es ja mal mit .... href="javascript:test();" probieren

    Wenn ich die Funktion WRITE() weglasse und den Link mittels document.write schreibe funktioniert es allerdings.

    ah, gut, dann empfehle ich, einfach folgendes zu machen:

    function schreiben()
    {
     document.write();
    }

    könnte evv. laufen.

    Weiß eventuell jemand wie ich es hinbekommen, dass das script auch mit der WRITE() Funktion funcktioniert?

    Lass es einfach mit dem write und mache stattdessen was anderes. Vielleicht hapert es bei dem mit der document-Methode, die er mit deiner Funktion verwechselt. Immerhin braucht man ja z.B. bei window.document.location.href=... ja auch nicht window.document zu schreiben, daher könnten einige Browser da Fehlermeldungen machen.

    benji

    --
    Those who know don't talk.
    Those who talk don't know.
    1. ach so, wusste nicht, dass document.write das ganze Dokument neu schreibt. dann ist logischerweise da der fehler ;-)

      --
      Those who know don't talk.
      Those who talk don't know.
      1. Hallo,
        du bist trotzdem ein toller Hecht mit deinen riesigen Scripten...

        Odium

        1. du bist trotzdem ein toller Hecht mit deinen riesigen Scripten...

          ?

          ICh glaube nicht, dass ich als einziger micht mit "riesigen Scripten" rumschlage(n muss [?]).....

          benji

          --
          Those who know don't talk.
          Those who talk don't know.
          1. Hallo benji,

            ICh glaube nicht, dass ich als einziger micht mit "riesigen Scripten" rumschlage(n muss [?]).....

            Bist Du auch nicht :-(

            Meine Studis reichen auch regelmaessig Skripte ein, die ausgedruckt den Regenwald nachhaltig schaedigen wuerden.

            Daraus habe ich die Lehre gezogen, dass ich noch intensiver auf "Modularisierung" hinweisen muss.

            gruesse
            rainer groth

            --
            ss:| zu:} ls:& fo:) de:] va:| ch:] n4:° rl:? br:$ js:| ie:| fl:( mo:?
            (--> einer der letzten bauhaeusler <--)
  4. Hallo Alex,

    function write(){

    1. Es ist ungünstig, eine Funktion write zu nennen, da dies ein reservierter Name ist. Das ist aber nicht der Fehler.

    document.write("<a href='#' onclick='javascript:test()'>Testlink</a>");

    2. javascript: hat in einem Eventhandler nichts verloren. Das ist aber auch nicht der Fehler.

    <body onload="write()">

    3. Damit wird das Dokument neu geschrieben und sieht dann so aus:
    <a href='#' onclick='javascript:test()'>Testlink</a>
    Sonst steht nichts mehr darin, also auch nicht die Funktion test().
    _Hier_ ist der Fehler.

    Grüße
    Andreas

    --
    "Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning."
    (Rich Cook)
  5. Guggugs Alex,

    document.write bietet sich bei dem, was du da vorhast, wegen der Überschreiberei nicht wirklich an. Du willst ja nur was in den BODY schreiben. Hier mal so ein Lösungsansatz mit innerHTML:

    <html>
    <head>
    <script language="JavaScript">
    function test(){
    alert("hi");
    }

    function schreibe(){
     var myHtml = "<a href="#" onclick="test();">Testlink</a>";
     document.getElementById('myDiv').innerHTML = myHtml;
    }

    </script>
    </head>
    <body onload="schreibe()">
    <div id="myDiv"></div>
    </body>
    </html>

    Guck dir mal in der JavaScript-Objekt-Referenz an, was es unter document und was es unter node alles so gibt. Das wird dir das Leben erheblich erleichtern. Du kannst jedes einzelne Element deiner Seite ansprechen, es erscheinen, verschwinden lassen und auch füllen. innerHTML gehört zwar nicht zum W3C-Standard, ist aber sehr praktisch und wird überdies von IE 5.0 und neuer, Netscape ab 6 und Opera interpretiert.
    Die Syntax von innerHTML findest du unter
    http://selfhtml.teamone.de/javascript/objekte/all.htm#inner_html

    Im übrigen gilt wirklich: never ever eine eigene Funktion genauso benennen wie eine, die es schon gibt.

    Gruß, Uschi

    1. Hi Uschi Danke für den Tipp....sowas ähnliches hatte ich auch im Sinn, nur ich wolltest erst mla ohne layer probieren.
      Und noch was Zu der WRITE() Funktion: normalerweise achte ich schon darauf dass ich funktionen nicht nach solchen bennen die es schon gibt, aebr das war eben nur ein beispiel welches zum. bei mir funktioniert hat.

      1. alex,
        nix verwechseln. DIV != LAYER; layer ist pfui, div ist hui

        du kannst auch direkt was in den body malen:
        document.getElementsByTagName['BODY'][0].innerHTML = "blabla";

        gruß, Uschi