Karl: getElementsByName IE

Hallo,

also ich schreibe Code mit Javascript in ein div.

z.B. <input type='text' name='test' id='testID'>

Wenn ich im IE jetzt darauf zugreifen möchte bekomme ich einen Laufzeitfehler. Das Objekt sei nicht definiert, also er findet nichts.

Im Firefox funktioniert alles tadellos.

Wenn ich aber mit dem IDTag im IE zugreife bekomme ich das Objekt zurück.

Kann mir das jemand erklären oder gibt es noch eine andere Möglichkeit auf diesen Teil zuzugreifen.

Danke und Gruß
Karl

  1. ...hab ich jetzt nicht ganz verstanden....
    gehts um ByName oder um ByID?

    --Morgen ist Heute schon Gestern -> Lebe den Tag

    1. ...hab ich jetzt nicht ganz verstanden....
      gehts um ByName oder um ByID?

      Ich möchte mit ByName zugreifen, dort hängt er sich. Aber mit ById nicht.

      Gruß

      1. Und was möchtest du ByName damit machen?

        1. Und was möchtest du ByName damit machen?

          Alle Daten die in den Feldern stehen neu berechnen.

          1. Magst du mal den Code oder einen Link posten?

            1. Also mal der Code:

              Ich habe eine HTML-Seite mit einem Iframe:

              <iframe id='tuEtwas></iframe>

              Wenn man jetzt etwas in der Hauptseite ändert so wird das iframe neu geladen:

              top.frames[0].location.href = "tueetwas.php";

              Ich lade dann eine PHP-Seite, weil ich nicht möchte, dass die obere Seite neu geladen wird.

              Dort schreiben ich dann in ein div Code:

              Hauptseite
              <div id='divID'></div>

              Iframe
              top.document.getElementById('').innerHTML = "<input type='text' value='2' name='price' />";

              Das klappt wunderbar.

              Das ist so eine Art Preisberechnung. Jetzt muss ich aber noch den Gesamtpreis ausrechnen:

              var prices = top.document.getElementsByName('price');

              if (prices.length) ------> und hier hauts ihn raus

              prices ist leer.

              Gruß

              1. Hi,

                top.document.getElementById('').innerHTML = "<input type='text'

                sowas wuerde ich mit createElement/appendChild machen. Dann kannst Du eine id zuweisen und entsprechend darauf zugreifen.

                Gruesse, Joachim

                --
                Am Ende wird alles gut.
                1. top.document.getElementById('').innerHTML = "<input type='text'
                  sowas wuerde ich mit createElement/appendChild machen. Dann kannst Du eine id zuweisen und entsprechend darauf zugreifen.

                  Das wäre zu komplex und zu langsam.

                  Eine ID hat er ja aber ich muss dann immer alle durchgehen.

                  Das ist so eine Art Preissystem. Ich füge einen Produkt dazu. Es bekommt eine ID. Wenn ich das Produkt aber wieder lösche, lösche ich einfach alles was zwischen diesem Produkt liegt.

                  Jetzt muss ich im IE immer jede ID durchteste, ob dort noch ein Produkt hängt. In allen andere Browsern hole ich es mir mit getElementsByName.

                  Ich würde es anders lösen, aber die Firma ...

                  Hauptsache es funktioniert jetzt und die Geschwindigkeit ist auch aktzeptable.

                  Gruß
                  Karl

                  1. Hi,

                    Das wäre zu komplex und zu langsam.

                    das ist - mit Verlaub - Bloedsinn. Warum sollten die Dom Methoden langsamer sein? Du kannst ja genausogut Namen vergeben.

                    Anyway - ich kann Dein Problem nicht ganz nachvollziehen. Das Folgende laeuft bei mir klaglos:
                    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
                            "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
                    <html>
                    <head>
                    <script type="text/javascript">
                    function doit() {
                        document.getElementById("xyz").innerHTML="<input name='xy' type='text'>";
                    }
                    function rdit() {
                        alert(document.getElementsByName("xy")[0].value);
                    }
                    </script>
                    </head>
                    <body>
                    <form id="xyz">
                    </form>
                    <a href="#" onclick="doit();return false">schreiben</a><br>
                    <a href="#" onclick="rdit();return false">lesen</a>
                    </body>
                    </html>

                    Gruesse, Joachim

                    --
                    Am Ende wird alles gut.
                2. top.document.getElementById('').innerHTML = "<input type='text'
                  sowas wuerde ich mit createElement/appendChild machen. Dann kannst Du eine id zuweisen und entsprechend darauf zugreifen.

                  Mit createElement brauchst du keine ID mehr, da du ja das Element schon hast, der Rückgabewert dert Funktion ist das Objekt.

                  Da der OP nur Schematisch zeigt was er macht (es wäre auch interessant zu Wissen welcher IE), vermute ich das es ein Timing Problem gibt mit innerHTML

                  [object].innerHTML = 'input type="text" name="x">';
                  var o = document.getElementsByName('x');

                  Unter Umständen kann es sein, dass das Element noch nicht im document zur Verfügung steht.

                  Deshalb besser in etwa sowas:

                  var o = document.createElement('input');
                  o.type = 'text';
                  document.body.appendChild(o);

                  und hier ist o auf jeden Fall vorhanden. (Trotzdem sollte man dies testen).

                  Struppi.

              2. var prices = top.document.getElementsByName('price');

                Wie schon oben jemand sagte, gibt ByName ja ein Array zurück...

                also müsste es wohl ...ByName('price')[0];
                (oder welches Element du willst)
                heißen.

                Nils

  2. Hallo,

    Wenn ich im IE jetzt darauf zugreifen möchte bekomme ich einen Laufzeitfehler. Das Objekt sei nicht definiert, also er findet nichts.

    Wie genau greifst du zu?

    <glaskugel>
    document.getElementsByName("test").Eigenschaft So funktioniert es nicht.
    </glaskugel>

    getElementsByName  Richtig ist: getElementsByName("test.")[0].Eigenschaft
    Mehrzahl  ^

    Für das erste Element mit dem Namen "Test" [1...n] für weitere.

    Grüße,

    Jochen

    --
    Heute schon gescribbelt?
    Scribbleboard
    1. Wie genau greifst du zu?

      <glaskugel>
      document.getElementsByName("test").Eigenschaft So funktioniert es nicht.
      </glaskugel>

      Das ist mir schon klar:
      var test = document.getElementsByName("test");

      alert(test);  -----> Jetzt ist test leer.

      Gruß

      1. Hi,

        Das ist mir schon klar:

        offenbar nicht, denn

        var test = document.getElementsByName("test");

        ^^^^

        alert(test);  -----> Jetzt ist test leer.

        nein, es enthaelt ein Array von allen Elementen des Namens "test":
        test[0] ist Dein Freund - soferns nur den einen gibt.

        Gruesse, Joachim

        --
        Am Ende wird alles gut.
        1. Das ist mir schon klar:
          offenbar nicht, denn

          Ja glaube ich schon

          var test = document.getElementsByName("test");
                                          ^^^^
          alert(test);  -----> Jetzt ist test leer.
          nein, es enthaelt ein Array von allen Elementen des Namens "test":
          test[0] ist Dein Freund - soferns nur den einen gibt.

          Nein tut es nicht (IE).
          Auch wenn ich alert(test) mach müßte nicht undefined kommen

          Grüße
          Karl

        2. Hi,
          ich habe mal vor einiger zeit eine loadbar geschrieben die für alle browser funtzten.Vielleicht wärs gut wenn Du den IE eine seperate variable gibst,obwohl der vielleicht auch DOM versteht.
          Hier mein beispiel aus meiner loadbar:

          var NS4=false, IE=false, DOM=false;
          if (document.getElementById) {
          DOM=true;
          }
          else if (document.all) {
          IE=true;
          }
          else if (document.layers) {
          NS4=true;
          }

          Dann kannst Du in aller Ruhe mit if (IE)... auf diese variablen zugreifen.

          weiss nicht ob Dir das hilft?
          Gruss
          Alain

  3. Hallo Karl,

    greif doch einfach über den Namen deines Formulars und den Namen deines Elements auf dieses zu!

      
    document.meinFormular.price  
    
    

    vgl.: http://forum.de.selfhtml.org/archiv/2005/1/t99876/#m610929

    Gruß Gernot

    1. Hallo Karl,

      greif doch einfach über den Namen deines Formulars und den Namen deines Elements auf dieses zu!

      document.meinFormular.price

      
      > vgl.: <http://forum.de.selfhtml.org/archiv/2005/1/t99876/#m610929>  
        
        
      Schon probiert, funktioniert auch nicht
      
  4. Hi,

    also ich schreibe Code mit Javascript in ein div.
    z.B. <input type='text' name='test' id='testID'>
    Wenn ich im IE jetzt darauf zugreifen möchte

    Da gab's was - daß der IE Probleme mit zur Laufzeit erzeugten name-Attributen hat.

    War hier erst vor ein paar Wochen diskutiert worden.

    Ich find das im Moment grad nicht, muß aber im 2005-Archiv stecken.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.