Compiwurstel: Fehlermeldung: undefined

Hallo zusammen,
ich habe folgendes Skript:

var text= new Object();

text['ip01a'] = "Hier steht der erste Text";
text['ip01b'] = "Hier steht der zweite Text";
text['ip01c'] = "Hier steht der dritte Text";
text['ip01d'] = "Hier steht der vierte Text";
text['ip01e'] = "Hier steht der fünfte Text";

function loadtxt(txt) {
document.getElementById("subline").innerHTML = text[txt];
}

Die Texte sollen in das folgende div geladen werden:

<div id="subline">&nbsp;</div>

Der Aufruf erfolgt wie folgt:

<a href="javascript:loadtxt(this.id)" id="ip01a">Link</a>

An anderer Stelle funktioniert das Skript einwandfrei, nur hier bekomme ich in dem div an Stelle des Textes die Ausgabe "undefined".
Ich versteh's nicht!

Zur Info: Die Seite, auf der skript, div und Aufruf stehen, wird per php in eine Rahmenseite geladen.

Kann mir jemand sagen, woran der Fehler liegt? Danke schon mal!

Gruß
Compiwurstel

  1. Hellihello Compiwurstl,

    <a href="javascript:loadtxt(this.id)" id="ip01a">Link</a>

    mit a href="" onclick="loadtxt(this.id)" id="ip01a">Link</a> gehts bei mir, aber komischerweise bleibst nicht im <div> stehen.

    frankx

    1. Hellihello Compiwurstl,

      mit <a href="#" onclick="loadtxt(this.id)" id="ip01a">Link</a> gehts
      vermutlich auch mit href="loadtxt... ;return false;"

      Gruß,

      frankx

      1. Hallo frankx

        mit <a href="#" onclick="loadtxt(this.id)" id="ip01a">Link</a> gehts

        Guter Tipp!!! Vielen Dank, so funzt's! Jetzt hab ich nur noch ein Problem:
        Da die Seite - wie gesagt - in eine andere per php includet wird, hat sie kein body-tag und folglich ist leider auch kein "onload" möglich, mit dem ich bereits beim Aufruf der Seite die Funktion loadtxt() auslösen könnte. Hast du oder jeamnd anders eine Idee, wie ich das anders lösen könnte?

        Gruß
        Compiwurstel

        1. hi,

          Da die Seite - wie gesagt - in eine andere per php includet wird, hat sie kein body-tag und folglich ist leider auch kein "onload" möglich, mit dem ich bereits beim Aufruf der Seite die Funktion loadtxt() auslösen könnte. Hast du oder jeamnd anders eine Idee, wie ich das anders lösen könnte?

          window.onload = funktionsreferenz;
          im Javascript.

          gruß,
          wahsaga

          --
          /voodoo.css:
          #GeorgeWBush { position:absolute; bottom:-6ft; }
          1. Hallo wahsaga,
            danke für die schnelle Rückmeldung.

            window.onload = funktionsreferenz;
            im Javascript.

            Der vollständige Funktionsaufruf lautet ja:
            loadtxt(this.id)" id="ip01a"

            Wenn ich das jetzt mit in das Skript packe, wie binde ich denn dann die id ein?

            Gruß Compiwurstel

            1. window.onload = funktionsreferenz;
              im Javascript.

              Der vollständige Funktionsaufruf lautet ja:
              loadtxt(this.id)" id="ip01a"

              Ja eben, die Frage ist welche id du benutzen willst.

              Wenn ich das jetzt mit in das Skript packe, wie binde ich denn dann die id ein?

              In die funktionsreferenz.

              function() { loadtxt('id'); }

              Struppi.

              --
              Javascript ist toll (Perl auch!)
              1. Hallo Struppi,
                alles klar, vielen Dank! Ich steh heut ein bisschen auf dem Schlauch, mein Kreislauf mag das Wetter nicht und mein Hirn meinen Kreislauf nicht! ;-)

                Das Prob ist also gelöst, nur leider gibt es ein Neues (siehe Beitrag oben von 12.45!

                Gruß Compiwurstel

        2. Guter Tipp!!! Vielen Dank, so funzt's!

          Hilfe, zu früh gefreut! Jetzt gibt's nämlich ein ganz anderes Problem:
          Wie gesagt, ich verwende die Funtion auch noch an anderer Stelle (natürlich mit anderen id und anderem Funktionsnamen!!!) und zwar:
          Es gibt die Seite "info.php", die bildet das Seitenlayout und dort gibt es ein div (id="label").
          In diese Seite wird nun die Navigation ("nav_ip01.inc") includet. Jeder Menüpunkt enthält per mouseover-Befehl den Aufruf:
          zeigetext(this.id)" id="info", wobei die id an den jeweiligen Menüpunkt angepasst wird. Der Text wird dann in das div ("label") geladen. Das Skript wird als externe Datei im head eingebunden.

          Wenn nun in die Seite "info.php" die Seite "picture.inc.php" geladen wird auf der nun das skript und die Aufrufe zu laodtxt() stehen, erscheint wiederum in dem div ("label") undefined.

          Und das, obwohl - wie gesagt - Befehlsname und IDs unterschiedlich sind. Was ist da los?

          Gruß Compiwurstel

          1. hi,

            Und das, obwohl - wie gesagt - Befehlsname und IDs unterschiedlich sind. Was ist da los?

            Betrachte bitte den HTML-Quelltext so, wie er im Browser ankommt.

            Ob du dir den per PHP include zusammenstellst, oder von deiner Oma hast stricken lassen, interessiert zunächst mal überhaupt nicht.

            gruß,
            wahsaga

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }
            1. Hallo Wahsaga

              Betrachte bitte den HTML-Quelltext so, wie er im Browser ankommt.

              Ich weiß nicht, ob ich richtig verstehe, worauf du hinaus willst, nur soviel: ohne die Einfügung des neuen Skript "loadtxt()" hat es im Rahmen fehlerfrei funktioniert, also irgendwie vertragen die beiden Skripte sich ja offenbar nicht miteinander, aber ich weiß nicht wieso!

              Gruß Compiwurstel

              1. hi,

                ohne die Einfügung des neuen Skript "loadtxt()" hat es im Rahmen fehlerfrei funktioniert, also irgendwie vertragen die beiden Skripte sich ja offenbar nicht miteinander, aber ich weiß nicht wieso!

                Mit "irgendwie" können wir auch nicht mehr anfangen.

                gruß,
                wahsaga

                --
                /voodoo.css:
                #GeorgeWBush { position:absolute; bottom:-6ft; }
                1. Hallo Wahsaga

                  Mit "irgendwie" können wir auch nicht mehr anfangen.

                  Ja, das nehme ich auch an! Aber da ich die Seitenstruktur beschrieben und die Codes aufgelistet habe, weiß ich im Mom welche Infos du noch gerne hättest!

                  Gruß Compiwurstel

                  1. hi,

                    Aber da ich die Seitenstruktur beschrieben

                    Wenn du damit das "x includet y, welches seinerseits z einbindet" meinst - noch mal: Das interessiert hier überhaupt nicht. Relevant ist, was beim Client ankommt.

                    und die Codes aufgelistet habe,

                    Bruchstücke, an denen dann auch noch was geändert wurde - nicht sehr aussagekräftig.

                    weiß ich im Mom welche Infos du noch gerne hättest!

                    Ich hätte gerne, dass _du_ mit sinnvollem Debugging anfängst.
                    Struppi schlug dir ja bereits einen simpeln, trivialen Anfang vor.

                    gruß,
                    wahsaga

                    --
                    /voodoo.css:
                    #GeorgeWBush { position:absolute; bottom:-6ft; }
                    1. Hallo Wahsaga,

                      Bruchstücke, an denen dann auch noch was geändert wurde - nicht sehr aussagekräftig.

                      hier ist der Code der Datei "js/txt2layer.js":

                      var text= new Object();

                      text['emp'] = "&nbsp;";
                      text['start'] = "Infos zum Menü 1";
                      text['info'] = "Infos zum Menü 2";
                      text['akt'] = "Infos zum Menü 3";
                      text['faq'] = "Infos zum Menü 4";
                      text['serv'] = "Infos zum Menü 5";
                      text['kont'] = "Infos zum Menü 6";
                      text['dwld'] = "Infos zum Menü 7";
                      text['sdmp'] = "Infos zum Menü 8";

                      function zeigetext(txt) {
                      document.getElementById("label").innerHTML = text[txt];
                      }

                      Das DIV:

                      <div id="label">&nbsp;</div>

                      Der Aufruf erfolgt so:

                      <a href="index.php" onmouseover="tauschen(document.st, '../../layout/pics/pix/dorange.gif'); zeigetext(this.id)" id="start" onmouseout="tauschen(document.st, '../../layout/pics/pix/dviolet.gif'); zeigetext('emp')">STARTSEITE</a>

                      Ich hätte gerne, dass _du_ mit sinnvollem Debugging anfängst.
                      Struppi schlug dir ja bereits einen simpeln, trivialen Anfang vor.

                      Die alert-Ausgabe lautet:
                      [object Object]
                      start=undefined

                      und

                      [object Object]
                      emp=undefined

                      Gruß Compiwurstel

                      1. hi,

                        Die alert-Ausgabe lautet:
                        [object Object]
                        start=undefined

                        und

                        [object Object]
                        emp=undefined

                        Also ist text zwar ein Objekt, aber es besitzt keine Eigenschaften start und emp.

                        gruß,
                        wahsaga

                        --
                        /voodoo.css:
                        #GeorgeWBush { position:absolute; bottom:-6ft; }
                        1. Hallo,
                          und da dreht sich für mich die Sache jetzt im Kreis. Wieso ist das jetzt plötzlich so, wo es doch die ganze Zeit funktioniert hat (und auf den Seiten, auf denen nicht gleichzeitig die Funktion "loadtxt()" aufgerufen wird auch noch funktioniert)?

                          Gruß Compiwurstel

                      2. Die alert-Ausgabe lautet:
                        [object Object]
                        start=undefined

                        und

                        [object Object]
                        emp=undefined

                        dann ist in deiner Funktion das text objekt nicht das Objekt was du weiter oben definiert hast, sonst würde es ja funktionieren.

                        D.h. jetzt musst du weiter auf Spurensuche gehen und dir z.b. die Details des Objektes anzeigen lassen, z.b. mit folgender Funktion:

                        function debugObj(o)
                        {
                           var t = 'Objekt: ' + o;
                           for(var a in o)
                           t += '\n' + a + ( typeof o[a] == 'String' ? o[a] : typeof o[a]);
                           alert(t);
                        }

                        debugObj(text);

                        Struppi.

                        --
                        Javascript ist toll (Perl auch!)
                        1. Hallo Struppi,

                          function debugObj(o)
                          {
                             var t = 'Objekt: ' + o;
                             for(var a in o)
                             t += '\n' + a + ( typeof o[a] == 'String' ? o[a] : typeof o[a]);
                             alert(t);
                          }

                          debugObj(text);

                          Wenn ich diese Funktion in das Skript einbaue bekomme ich folgende alert-Ausgabe:
                          Objekt: [object Object]
                          empstring
                          startstring
                          infostring
                          ...

                          usw. für "text[''] im Skript.

                          gruß Compiwurstel

                          1. hi,

                            Wenn ich diese Funktion in das Skript einbaue bekomme ich folgende alert-Ausgabe:
                            Objekt: [object Object]
                            empstring
                            startstring
                            infostring

                            Gut, da scheinen die Eigenschaften ja vorhanden zu sein.

                            Aber hast du diese Kontrollausgabe jetzt auch wirklich _in_ der Funktion zeigetext() gemacht?

                            gruß,
                            wahsaga

                            --
                            /voodoo.css:
                            #GeorgeWBush { position:absolute; bottom:-6ft; }
                            1. Hallo Struppi, hallo Wahsaga,

                              da hatte ich wohl einen Fehler gemacht, weiß aber nicht, ob ich es jetzt richtig verstanden habe. Deshalb in kleinen Schritten:

                              Ich habe diesen Teil in das Skript eingefügt:

                              function debugObj(o)
                              {
                                 var t = 'Objekt: ' + o;
                                 for(var a in o)
                                 t += '\n' + a + ( typeof o[a] == 'String' ? o[a] : typeof o[a]);
                                 alert(t);
                              }

                              Und den Aufruf so ergänzt:

                              <a href="../../index.php" onmouseover="tauschen(document.st, '../../layout/pics/pix/dorange.gif'); zeigetext(this.id); debugObj(text)" id="start" onmouseout="tauschen(document.st, '../../layout/pics/pix/dviolet.gif'); zeigetext('emp')">STARTSEITE</a>

                              Wenn ich nun eine Seite aufrufe, in der "loadtxt()" nicht geladen wird, dann bekomme ich dieselbe alert-Meldung wie oben aufgeführt,
                              also:

                              Objekt: [object Object]
                              empstring
                              startstring
                              ...

                              Wenn ich eine Seite aufrufe, in der "loadtxt()" geladen wird (über: windows.onload = function() { loadtxt('ip01a'); } ), dann lautet die alert-Meldung beim mouseover über obigen link analog:

                              Objekt: [object Object]
                              ip01astring
                              ip01bstring
                              usw.

                              Gruß Compiwurstel

                              1. hi,

                                Und den Aufruf so ergänzt:

                                <a href="../../index.php" onmouseover="tauschen(document.st, '../../layout/pics/pix/dorange.gif'); zeigetext(this.id); debugObj(text)"

                                Baue bitte debugObj(text) _in_ die Funktion zeigetext ein.

                                Wenn ich nun eine Seite aufrufe, in der "loadtxt()" nicht geladen wird, dann bekomme ich dieselbe alert-Meldung wie oben aufgeführt,
                                also:

                                Objekt: [object Object]
                                empstring
                                startstring
                                ...

                                Also hat das Objekt text hier Eigenschaften mit Namen emp, string, ...

                                Wenn ich eine Seite aufrufe, in der "loadtxt()" geladen wird (über: windows.onload = function() { loadtxt('ip01a'); } ), dann lautet die alert-Meldung beim mouseover über obigen link analog:

                                Objekt: [object Object]
                                ip01astring
                                ip01bstring
                                usw.

                                Also hat das Objekt text hier Eigenschaften mit Namen ip01a, ip01b, ...

                                Vermutlich überschreibst du dir dein Objekt text mit dem neuen Script einfach.

                                Ändere doch mal eins von den Scripten so ab, dass du dort statt text ein Objekt text2 initialisierst und benutzt.

                                gruß,
                                wahsaga

                                --
                                /voodoo.css:
                                #GeorgeWBush { position:absolute; bottom:-6ft; }
                                1. Hallo Wahrsaga,

                                  Ändere doch mal eins von den Scripten so ab, dass du dort statt text ein Objekt text2 initialisierst und benutzt.

                                  Jopp, das war's!!!! Jetzt funzt alles so wie es soll! Danke dir und Struppi vielmals!

                                  Wenn du mir noch einen Gefallen tun willst:
                                  Wie hätte ich denn "debugObj(text) _in_ die Funktion zeigetext" einbauen müssen? Das weiß ich nämlich nicht und vielleicht kann ich es in anderem Zusammenhang mal gut brauchen und muss dannnciht im Forum rumnerven!

                                  Viele Grüße
                                  Compiwurstel

                                  1. Wenn du mir noch einen Gefallen tun willst:
                                    Wie hätte ich denn "debugObj(text) _in_ die Funktion zeigetext" einbauen müssen? Das weiß ich nämlich nicht und vielleicht kann ich es in anderem Zusammenhang mal gut brauchen und muss dannnciht im Forum rumnerven!

                                    Naja, genauso wie du mein alert() eingebaut hast.

                                    function loadtext(id)
                                    {
                                    debugObj(text);
                                    ....
                                    }

                                    Struppi.

                                    --
                                    Javascript ist toll (Perl auch!)
                                    1. Hallo Struppi,

                                      Naja, genauso wie du mein alert() eingebaut hast.

                                      function loadtext(id)
                                      {
                                      debugObj(text);
                                      ....
                                      }

                                      alles klar, dann hatte ich auch das falsch verstanden - wie gesagt: ist nicht 100% mein Tag heute (Wetter-Kreislauf-Hirn...).

                                      Vielen Dank nochmal
                                      und wenigstens euch einen schönen Tag!

                                      Gruß Compiwurstel

                          2. Wenn ich diese Funktion in das Skript einbaue bekomme ich folgende alert-Ausgabe:

                            nicht irgendwo in das Skript, sondern in die Funktion wo du den Text ausgeben willst.

                            Struppi.

                            --
                            Javascript ist toll (Perl auch!)
  2. ich habe folgendes Skript:

    var text= new Object();

    text['ip01a'] = "Hier steht der erste Text";
    text['ip01b'] = "Hier steht der zweite Text";
    text['ip01c'] = "Hier steht der dritte Text";
    text['ip01d'] = "Hier steht der vierte Text";
    text['ip01e'] = "Hier steht der fünfte Text";

    function loadtxt(txt) {
    document.getElementById("subline").innerHTML = text[txt];
    }

    sieht einwandfrei aus.

    Die Texte sollen in das folgende div geladen werden:

    <div id="subline">&nbsp;</div>

    Der Aufruf erfolgt wie folgt:

    <a href="javascript:loadtxt(this.id)" id="ip01a">Link</a>

    An anderer Stelle funktioniert das Skript einwandfrei, nur hier bekomme ich in dem div an Stelle des Textes die Ausgabe "undefined".

    Hast du dir die Werte mal ausgeben lassen?
    function loadtxt(txt) {
    alert(text + '\n' + txt + '=' + text[txt] );
    }

    Struppi.

    --
    Javascript ist toll (Perl auch!)