M.Yankulin: dynamischer Funktionsaufruf

Hallo zusammen,

ich habe hier eine Anwendung, die das XML File ausliest und ausgibt. Ausgabe soll in Form von Links erfolgen. Die Knotennamen müssen dynamisch ausgelesen werden. Falls der der Knoten weitere Unterknoten enthält, müssen diese wiederum auch als Links dargestellt werden.

Ich möchte also die Links dynamisch erzeugen, und falls eins dieser Links angeklickt wird, muss die Funktion wieder aufgerufen werden.
Mein Code sieht im Moment ungefähr so aus:

function dispayTreeOnLoad (xmlFile, tree)
{
 var counter, temp_result, anzahl;
 loadXML(xmlFile);
 content=http_request.documentElement;
 anzahl = NumberChildren (content);

for (counter=0; counter < anzahl; counter++)
 {
  if (isNode (content))
  {

document.write ('<a href="javascript:dispayTreeOnLoad (tree_1.xml, content.childNodes(counter).tagName))">'+  content.childNodes(counter).tagName +'<a/>' + '<br>');
  }
  else
   document.write ('<a href="ziel.html">' +  content.childNodes(counter).text + '<br>');
 }

}

der HTML Teil sieht folgendermaßen aus:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Test</title>
<script src = "script4.js"></script>
</head>
<body onload = "javascript:dispayTreeOnLoad ('tree_1.xml')">
</body>
</html>

der Aufruf der Funktion im Link funktioniert aber natürlich nicht... hat jemand vielleicht eine Idee, wie hier die Paramenterübergabe erfolgen kann, bzw. der Funktionsaufruf an sich???

  1. Hellihello M.

    hat jemand vielleicht eine Idee, wie hier die Paramenterübergabe erfolgen kann, bzw. der Funktionsaufruf an sich???

    Hochkommas im Funktionsaufruf, aber escaped "'". Elegenater vermutlich, die Knoten in den Dokumentenbaum einzuhängen. Spart auch die Escaperei.

    Gruß,

    frankx

  2. document.write ('<a href="javascript:dispayTreeOnLoad (tree_1.xml, content.childNodes(counter).tagName))">'+  content.childNodes(counter).tagName +'<a/>' + '<br>');

    Du willst das Dokument überschreiben?
    Wenn nicht, solltest du mnicht mit document.write() arbeiten sondern mit
    createElement() und appendChild()

    Struppi.

    1. document.write ('<a href="javascript:dispayTreeOnLoad (tree_1.xml, content.childNodes(counter).tagName))">'+  content.childNodes(counter).tagName +'<a/>' + '<br>');

      Du willst das Dokument überschreiben?
      Wenn nicht, solltest du mnicht mit document.write() arbeiten sondern mit
      createElement() und appendChild()

      Struppi.

      Hallo Struppi,

      es muss wirklich überschreiben werden...
      das Hauptproblem ist, dass der neue Funktionsaufruf innerhalb von document.write() wie bsp.: document.write('<a href="javascript:Test()">'+Linkname+'</a> <br>'); nicht funktioniert... dabei ist es egal, ob bei Test() Parameter übergeben werden, oder nicht..:-/

      Komme an dieser Stelle echt nicht weiter...

      Danke noch mal,
      Maria

      1. es muss wirklich überschreiben werden...

        Genau daran....

        das Hauptproblem ist, dass der neue Funktionsaufruf innerhalb von document.write() wie bsp.: document.write('<a href="javascript:Test()">'+Linkname+'</a> <br>'); nicht funktioniert... dabei ist es egal, ob bei Test() Parameter übergeben werden, oder nicht..:-/

        hängt das Problem, wenn du das Dokument überschreibst, existiert auch kein JS mehr.

        Komme an dieser Stelle echt nicht weiter...

        Nicht mit dieser Methode.

        Struppi.

        1. Hi,

          noch mal Danke für deine Hilfe!!!

          wie könnte denn die Lösung mit createElement () aussehen??? Sorry, ich kenne mich zu wenig damit aus, ich habe jetzt was ausprobiert, was etwa aussieht wie:

          var element = createElement ('<a href="javascript:Test()">'+Linkname+'</a> <br>');
          document.appendChild(element);

          aber so wird gar nichts angezeigt...es werden aber auch keine Fehler gemeldet...

          Danke & Gruß, Maria

          es muss wirklich überschreiben werden...

          Genau daran....

          das Hauptproblem ist, dass der neue Funktionsaufruf innerhalb von document.write() wie bsp.: document.write('<a href="javascript:Test()">'+Linkname+'</a> <br>'); nicht funktioniert... dabei ist es egal, ob bei Test() Parameter übergeben werden, oder nicht..:-/

          hängt das Problem, wenn du das Dokument überschreibst, existiert auch kein JS mehr.

          Komme an dieser Stelle echt nicht weiter...

          Nicht mit dieser Methode.

          Struppi.

          1. wie könnte denn die Lösung mit createElement () aussehen??? Sorry, ich kenne mich zu wenig damit aus, ich habe jetzt was ausprobiert, was etwa aussieht wie:

            Was heißt ausprobiert? Du hast dir nicht den Link angeschaut? Da steht wie du die Funktionen verwendest.

            Struppi.

            1. Doch, ich habe es mir angeschaut... aber anscheinend mache ich da etwas falsch...

              wie könnte denn die Lösung mit createElement () aussehen??? Sorry, ich kenne mich zu wenig damit aus, ich habe jetzt was ausprobiert, was etwa aussieht wie:

              Was heißt ausprobiert? Du hast dir nicht den Link angeschaut? Da steht wie du die Funktionen verwendest.

              Struppi.

              1. Doch, ich habe es mir angeschaut... aber anscheinend mache ich da etwas falsch...

                Ja. Der Fehler steht in der Fehlerkonsole.

                Wie kommst du auf diesen Code:
                var element = createElement ('<a href="javascript:Test()">'+Linkname+'</a> <br>');

                Du kannst mit document.createElement() erstmal nur ein Element erzeugen, die Eigenschaften muss du danach hinzufügen.

                var element = createElement ('a');  
                element.onclick = Test;  
                element.innerHTML = Linkname;
                

                wobei das natürlich kein Link ist, es sei denn Test() ruft eine neue Seite auf.

                Struppi.

                Bitt lass von der vorherigen Nachricht nur das stehen worauf sich deine Antwort bezieht und schreibe diese darunter.  Fullquotes wie in emails, ist in Foren nicht üblich und erschwert die Lesbarkeit.

                Struppi.

                1. Hallo Struppi,

                  das Ziel ist aber, die Funkiton wirklich die Links darzustellen, und sobald man den Link ancklickt, wird die Funkiton mit den anderen Paramentern aufgerufen...Gibts eine Möglichkeit, das darzustellen???

                  Danke

                  1. Hallo,

                    du solltest dir klar machen, was der User erwartet, wenn er auf einen Link oder auf einen Knopf klickt. Link -> andere Seite, Button -> Aktion.
                    Das ist wie im Leben, drücke ich auf einen Lichtschalter, erwarte ich, dass sich die Tür öffnet (und ich in einen anderen Raum gehen kann). Stell dir mal vor, du drückst auf die Türklinke und das Licht geht an, oder beim Griff zum Lichtschalter wirst du in den Nachbarraum gebeamt. Irgendwie verwirrend.

                    Gruß, Jürgen

                    PS Der Vergleich hinkt natürlich, da in Formularen der Button (auch) eine neue Seite lädt.

                2. Hallo Struppi,

                  Fullquotes wie in emails, ist in Foren nicht üblich und erschwert die Lesbarkeit.

                  was meinst du mit "Fullquotes wie in emails"? Gerade im Mailverkehr habe ich den hier üblichen und sinnvollen Zitierstil kennen und schätzen gelernt. Dass es auch beim Mailen ab und zu Uneinsichtige gibt, die TOFU servieren, muss ja nichts heißen. Aber auch da weise ich (wenn ich es mir erlauben kann) die Leute höflich darauf hin, dass diese Unart kontraproduktiv ist, weil sie das Nachvollziehen des Dialogs erschwert und die Textmenge unnötig aufbläht. Das gilt auch für die Papiermenge[*], solange die gängigen Mailclients noch nicht die Funktion bieten, den lästigen TOFU-Appendix beim Drucken automatisch wegzulassen.

                  So long,
                   Martin

                  [*] Ja, auch im High-Tech-Zeitalter gibt es noch viele Leute, die ihre Mails grundsätzlich ausdrucken und abheften.

                  --
                  Die letzten Worte des Polizisten:
                  Ich hab mitgezählt: Sechs Schuss, jetzt hat er keine Munition mehr!
                  1. Fullquotes wie in emails, ist in Foren nicht üblich und erschwert die Lesbarkeit.

                    was meinst du mit "Fullquotes wie in emails"? Gerade im Mailverkehr habe ich den hier üblichen und sinnvollen Zitierstil kennen und schätzen gelernt. Dass es auch beim Mailen ab und zu Uneinsichtige gibt, die TOFU servieren, muss ja nichts heißen

                    ToFu sieht man bei Mails eher selten, aber Fullquotes sind sehr verbreitet. Anderseits hab ich da auch keinen Bock ständig als Geek dazustehen, es hat mich schon viel Hingabe gekostet, zu erklären das HTML Mails Böse sind. Fullquotes sind dagegen ganz ok, z.b. wenn man die Mail weiterleiten möchte, auch wenn die Kommunikation manchmal schwerer nachzuvollziehen ist, wie bei einem normalen Zitierstil, aber den kriegst dem DAU nur schwer eingebleut.

                    Struppi.

                  2. Fullquotes wie in emails, ist in Foren nicht üblich und erschwert die Lesbarkeit.

                    was meinst du mit "Fullquotes wie in emails"? Gerade im Mailverkehr habe ich den hier üblichen und sinnvollen Zitierstil kennen und schätzen gelernt.

                    Privat, ja. In geschäftlicher Kommunikation sind TOFUs gang und gäbe, fast sogar schon eine Konvention. Mehrmals wurde bereits angemerkt, ich solle doch nicht immer alles durcheinanderwürfeln …

                    Dass es auch beim Mailen ab und zu Uneinsichtige gibt, die TOFU servieren, muss ja nichts heißen. Aber auch da weise ich (wenn ich es mir erlauben kann) die Leute höflich darauf hin, dass diese Unart kontraproduktiv ist, weil sie das Nachvollziehen des Dialogs erschwert und die Textmenge unnötig aufbläht.

                    Sinnvolles Kürzen sowie ein (vor allem visuell) nachvollziehbarer Gesprächsverlauf sind dank Outlooks legendärer Kammzitate leider nicht möglich. Wenigstens kann man HTML deaktivieren und entgeht so dem Sekretariats-Comic Sans MS-Ästhetikempfinden.

                    Roland

                    --
                    Aquahu akbar!
  3. Hallo M.Yankulin,

    so richtig verstehe ich nicht, was du da machst. Aber mir sind einige Ungereimtheiten aufgefallen:

    function dispayTreeOnLoad (xmlFile, tree)

    Funktion mit zwei Übergabeparametern.

    document.write ('<a href="javascript:dispayTreeOnLoad (tree_1.xml, content.childNodes(counter).tagName))">'+  content.childNodes(counter).tagName +'<a/>' + '<br>');

    Aufruf der Funktion mit zwei Parametern, der erste ist die Variable tree_1.xml.

    <body onload = "javascript:dispayTreeOnLoad ('tree_1.xml')">

    Aufruf der Funktion mit nur einem Parameter, dieser ist der String 'tree_1.xml'.

    Ist das so gewollt?

    Gruß, Jürgen

    1. Hallo Jürgen,

      danke für deine Hilfe,

      es geht mir speziell darum eigentlich, den Link dynamisch aufzubauen... irgendwie wenn ich versuche innerhalb von der Anweisung document.write eine JavaScript Funktion aufzurufen mit Paramentern funktioniert das nicht. Die Fehlermeldung lautet "Objekt erwartet"...

      der Code an dieser Stelle sieht (vereinfacht) so aus:
      document.write('<a href="javascript:FunctionTest()">'+ Link +'<a/> <br>');

      ("Link" ist der Wert, der als Name des Links dargestellt werden soll..)

      dabei ist es funktioniert der Aufruf der Funktion "FunctionTest()" weder mit Parameternübergabe, noch ohne...

      Danke & Gruß,
      Maria

      Hallo M.Yankulin,

      so richtig verstehe ich nicht, was du da machst. Aber mir sind einige Ungereimtheiten aufgefallen:

      function dispayTreeOnLoad (xmlFile, tree)

      Funktion mit zwei Übergabeparametern.

      document.write ('<a href="javascript:dispayTreeOnLoad (tree_1.xml, content.childNodes(counter).tagName))">'+  content.childNodes(counter).tagName +'<a/>' + '<br>');

      Aufruf der Funktion mit zwei Parametern, der erste ist die Variable tree_1.xml.

      <body onload = "javascript:dispayTreeOnLoad ('tree_1.xml')">

      Aufruf der Funktion mit nur einem Parameter, dieser ist der String 'tree_1.xml'.

      Ist das so gewollt?

      Gruß, Jürgen