ralf: Variablen

Hallo,

ich hab folgenden Code:

var prod1=crossDOM(1,'produkt');
var sign1=crossDOM(1,'signet');
var txt1=crossDOM(1,'text');

function init() {
 prod1.top=20;
 sign1.top=objHeight('produkt')+objTop('produkt');
 txt1.top=objHeight('signet')+objTop('signet');
}

Wenn ich das Script aufrufe, kommt die Fehlermeldung, das prod1 null oder kein objekt ist. Schreibe ich es so:

function init() {
        var prod1=crossDOM(1,'produkt');
        var sign1=crossDOM(1,'signet');
        var txt1=crossDOM(1,'text');

prod1.top=20;
 sign1.top=objHeight('produkt')+objTop('produkt');
 txt1.top=objHeight('signet')+objTop('signet');
}

dann gehts.

Da noch ein paar funktionen mehr kommen, will ich nicht immer die Objekte neu definieren.

Was mach ich falsch?

Danke und Gruß

Ralf

PS. Die Funktion crossDOM hat damit nix zu tun

    1. Hallo Odium,

      probiers doch mal ohne var

      Alles klar, innerhalb der Funktion werden globale Variablen ohne var definiert. Jetzt gehts auch.

      Aber warum werden diese ausserhalb der Funktion nicht global angesehen?

      Gruß

      Ralf

      1. Hallo,

        Alles klar, innerhalb der Funktion werden globale Variablen ohne var definiert. Jetzt gehts auch.

        Aber warum werden diese ausserhalb der Funktion nicht global angesehen?

        Werden sie, glaub mir ;-)).

        Wann rufst Du init() auf?. Ich schätze mal onload? Die Zuweisungen außerhalb der Funktion werden sofort ausgeführt, also gegebenenfalls noch bevor die Seite geladen wurde. Dann kann natürlich noch nicht auf Objekte der Seite zugegriffen werden. Es können also auch Variablen noch keine Eigenschaftswerte dieser Objekte zugewiesen werden.

        viele Grüße

        Axel

  1. Hi,

    PS. Die Funktion crossDOM hat damit nix zu tun

    sicher? Versuche an der Stelle, wo Du die Variablen initialisierst, mal ein alert(crossDOM) bzw. alert(crossDOM(1,'produkt')).

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hi,

      sicher? Versuche an der Stelle, wo Du die Variablen initialisierst, mal ein alert(crossDOM) bzw. alert(crossDOM(1,'produkt')).

      sicher bin ich sicher :)

      Die Funktion crossDOM macht nichts anderes als Objekte für unterschiedliche Browser "lauffähig" zu machen. Wenn ich die deklarierung innerhalb der Funktion mach, gehts ja auch

      gruß

      Ralf

      1. Hi,

        sicher? Versuche an der Stelle, wo Du die Variablen initialisierst, mal ein alert(crossDOM) bzw. alert(crossDOM(1,'produkt')).
        sicher bin ich sicher :)

        ist Dein Browser auch sicher? ;-)

        Die Funktion crossDOM macht nichts anderes

        Sofern sie da schon bekannt ist.

        Cheatah

        --
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. Hi,

          ist Dein Browser auch sicher? ;-)

          Die Funktion crossDOM macht nichts anderes

          Sofern sie da schon bekannt ist.

          Glaub mir es ist. Ich kann Dir den Code leider nicht posten, also vertrau mir :)

          gruß

          Ralf

          1. Hi,

            Glaub mir es ist. Ich kann Dir den Code leider nicht posten, also vertrau mir :)

            den Code will ich gar nicht wissen, sondern nur, welches Ergebnis der alert() brachte :-) Ich kann Deinen Äußerungen halt nicht entnehmen, ob Du "nur glaubst", oder ob Du schon geprüft hast. Oftmals sind es tatsächlich solche Dinge, bei denen man sich hinterher an die Stirn klatscht, dass man nicht gleich dran gedacht hat.

            Cheatah

            --
            X-Will-Answer-Email: No
            X-Please-Search-Archive-First: Absolutely Yes
          2. Hallo,

            »»Wenn ich das Script aufrufe, kommt die Fehlermeldung, das prod1 null oder kein objekt ist.

            dann wird wohl deine Funktion crossDOM zum Zeitpunkt des Aufrufs null zurückliefern. Falls der Script-Code im Header-Bereich steht, dann kann sie (crossDOM) wohl noch nicht aufs DOM zurgreifen bzw. übers DOM auf die entspr. Elemente, da diese noch nicht zur Verfügung stehen.
            Solange uns also nicht bekannt ist wo dein Script-Code steht und wann die einzelnen Funktionen aufgerufen werden, läßt sich zu dem von dir beschriebenen Problem keine schlüssige Aussage treffen.
            Ich vermute du rufst die init-Funktion dann auf, wenn die Seite vollständig geladen ist. Zu diesem Zeitpunkt funktioniert crossDOM wahrscheinlich korrekt, wo hingegen bei deiner ursprünglichen Form der Implementierung, die entspr. Elemente noch nicht ermittelt werden können, da die Initialisierung vor der Bereitstellung erfolgt und somit fehlschlagen muss.

            ...
            //Deklaration
            var prod1;
            var sign1;
            var txt1;

            //Initialisierung
            function init ()
            {
              prod1 = crossDOM(1,'produkt');
              sign1 = crossDOM(1,'signet');
              txt1  = crossDOM(1,'text');

            prod1.top = 20;
              sign1.top = objHeight('produkt') + objTop('produkt');
              txt1.top  = objHeight('signet') + objTop('signet');
            }
            ...
            <body onload="init();">
            ...

            bernd