Alexander hier: document.all (MSIE) und document.layers (NS) mit Variablen

Hallo,

ich habe folgendes JavaScript in einer Funktion, welches problemlos funktioniert:

if(document.getElementsByName("name_" + nummer)[0].style.display == "none") { (...) }

Es gibt mehrere Elemente im HTML-Quellcode, die benannt sind mit z.B. "name_5", "name_6", "name_193" - und die möchte ich nun einzeln ansprechen. Beim Aufruf der JavaScript-Funktion wird die Nummer übergeben ("funktion(nummer)"), die in der Funktion als "nummer" die Nummer enthält.

Nun versuche ich auch document.all (JScript, MSIE) und document.layers (Netscape 4) in die JavaScript-Funktion einzubauen zu machen, um je nach Browser das passende anzubieten.
Leider kriege ich die Befehle für MSIE (JScript) und Netscape (Layers) nicht hin, da ich die Nummer nicht reinkriege.

So sollte es ansonsten sein:

Mit document.all:
 if(document.all.name_ + nummer + [0].style.display == "none") { (...) } // fehlerhaft!

Und mit document.layers:
 if(document.name_ + nummer + [0].visibility == "hide") { (...) } // fehlerhaft!

Ich weiß einfach nicht, wie ich "nummer" da mit reinkriege. So wie ich es versucht habe, geht es jedenfalls nicht: da kommen nur JavaScript-Fehlermeldungen!
Wenn ich ein einzelnes Element ("name") anspreche geht Obiges (zumindest document.all), aber ich habe ja mehrere mit unterschiedlichen Namen.

Weiß einer Rat?

Hilflose Grüße
Alexander

  1. Hi Alexander!

    Mit document.all:
    if(document.all.name_ + nummer + [0].style.display == "none") { (...) } // fehlerhaft!

    if (eval("document.all.name_" + nummer + "[0].style.display == 'none'")){ (...) }

    Genauso für das andere Beispiel - sollte helfen.

    Grüsse,
    Richard

    1. Hi,

      if (eval("document.all.name_" + nummer + "[0].style.display == 'none'")){ (...) }

      neeeeiiiiin![1] Um eval() zu verwenden muss man schon einen *sehr* guten Grund haben. In *allen* anderen Fällen ist auf eval() zu verzichten.

      Schema 4 ist eine bei allen JavaScript-Objekten anwendbare Syntax. Wobei übrigens mehr als fraglich ist, warum document.all und document.layers überhaupt eingesetzt werden sollte - spielen IE 4 und Netscape 4 tatsächlich für die Anwendung eine Rolle?

      Cheatah

      [1] Ich konnte multiplen Ausrufezeichen gerade noch widerstehen.

      --
      X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
      X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
      X-Will-Answer-Email: No
      X-Please-Search-Archive-First: Absolutely Yes
      1. Hi Cheatah!

        neeeeiiiiin![1] Um eval() zu verwenden muss man schon einen *sehr* guten Grund haben. In *allen* anderen Fällen ist auf eval() zu verzichten.

        Ich lerne ja gerne was dazu: Warum?

        Weil es von irgendwelchen Uraltbrowsern nicht unterstützt wird?
        Weil es den Code komplizierter macht?
        Weil es lange in der Ausführung braucht?
        Weil es eine W3C recommendation gibt, die besagt "you need a *very* good reason to use eval"? [2]

        Grüsse,
        Richard
        [2] Sorry, couldn't resist...

        1. Mahlzeit,

          Weil es lange in der Ausführung braucht?

          Ja.

          Und den wichtigsten Punkt hast du vergessen:

          Weil die unkontrollierte Ausführung von dynamisch erzeugtem Code ein potentielles Sicherheitsrisiko ist.

          MfG,
          EKKi

          1. 'n Abend,

            ich danke Euch für die schnelle und gute Hilfe.
            Ich habe es mit [] hinbekommen. :-)
            Die Kompatibilität mit älteren Browsern ist übrigens schon wichtig, von daher muß ich das ganze eben gerade 3 x einbauen.

            Gruß
            Alexander

            1. Hallo Alexander,

              Ich habe es mit [] hinbekommen. :-)
              Die Kompatibilität mit älteren Browsern ist übrigens schon wichtig, von daher muß ich das ganze eben gerade 3 x einbauen.

              Wenn es tatsächlich läuft ist es ja ok. Netscape 4 hat webhits.de zufolge noch
              soviel Nutzer wie alle Operaversionen zusammen.

              Bei den Versionen des Netscape 4 sind übrigens Unterschiede in der logischen
              Reihenfolge der layer möglich, ab 4.7 oder so erfolgt der Seitenaufbau anders.

              Vielleicht ist getElementById für die Browser Internet Explorer 4 und Netscape 4
              noch interessant für dich.

              Grüsse

              Cyx23

              1. Hallo,

                Wenn es tatsächlich läuft ist es ja ok. Netscape 4 hat webhits.de zufolge noch soviel Nutzer wie alle Operaversionen zusammen.

                das kann ich mir nicht vorstellen. Das liegt vermutlich daran, dass viele Statistik-Tools alle User Agents der Gestalt "Mozilla/4.0 (...)" dem Netscape 4.x zuschlagen, falls sie durch den Teil in den Klammern nicht eindeutig einem anderen Browser zuzuordnen sind.

                In Wirklichkeit, glaube ich, liegt der Netscape 4.x im Bereich <1%, Opera schätze ich deutlich höher.

                So long,
                 Martin

                --
                Der Alptraum jedes Computers:
                "Mir war, als hätte ich gerade eine 2 gesehen."
                1. Hallo Martin,

                  das kann ich mir nicht vorstellen. Das liegt vermutlich daran, dass viele Statistik-Tools alle User Agents der Gestalt "Mozilla/4.0 (...)" dem Netscape 4.x zuschlagen, falls sie durch den Teil in den Klammern nicht eindeutig einem anderen Browser zuzuordnen sind.

                  Als alter Netscape 4 Fan laß ich mich doch durch solch eine Argumentation
                  nicht verunsichern :-)

                  Bei webhits.de ist nachvollziehbar, wie sich Netscape 4 auf die Versionen
                  verteilt: Netscape 4.79 0.2% usw.. Netcape 4.8 taucht allerding gar nicht auf,
                  aber vielleicht wird er wirklich unter 0.05% genutzt.

                  In Wirklichkeit, glaube ich, liegt der Netscape 4.x im Bereich <1%, Opera schätze ich deutlich höher.

                  Zumindest sehe ich heute nicht mehr die Notwendigkeit, Netscape 4 möglichst
                  umfassend zu versorgen. Bei Opera kommen mir allerdings auch immer wieder
                  Zweifel, wie weit ich es mit den Eigenheiten aufnehmen soll. Opera 8 z.B. hat
                  offenbar noch einige eigene Bugs, und ist nach einigen Statistiken genauso
                  verbreitet wie Version 7 oder 9.

                  Opera 9 meldet sich auch ordnungsgemäß, das Argument, er würde immer als IE
                  erkannt, taugt also auch nicht.

                  Bevor zuviel Aufwand mit Anpassungen für Opera getrieben wird, sollte wohl
                  erstmal an Browser wie Safari gedacht werden. Aber vielleicht kommt ja mit
                  Kestrel noch etwas Bewegung in die Sache, auch wenn es kein open source ist.

                  Grüsse

                  Cyx23

                  1. n'Abend!

                    Als alter Netscape 4 Fan ...

                    Oh, mein aufrichtiges Beileid.

                    Bei webhits.de ist nachvollziehbar, wie sich Netscape 4 auf die Versionen
                    verteilt: Netscape 4.79 0.2% usw.. Netcape 4.8 taucht allerding gar nicht auf

                    Gab's diese Version überhaupt? Nie von gehört ...

                    In Wirklichkeit, glaube ich, liegt der Netscape 4.x im Bereich <1%, Opera schätze ich deutlich höher.
                    Zumindest sehe ich heute nicht mehr die Notwendigkeit, Netscape 4 möglichst umfassend zu versorgen.

                    Okay, zumindest in diesem Punkt sind wir uns einig. ;-)

                    Opera 8 z.B. hat offenbar noch einige eigene Bugs, und ist nach einigen Statistiken genauso verbreitet wie Version 7 oder 9.

                    Was haben die Bugs mit dem Verbreitungsgrad bzw. der Häufigkeit zu tun? Wenn du so argumentierst, dürfte der IE6 keine 2% Anteil haben.

                    Opera 9 meldet sich auch ordnungsgemäß, das Argument, er würde immer als IE erkannt, taugt also auch nicht.

                    Für den 9er vielleicht nicht; für die 7er- und 8er-Versionen schon.

                    Bevor zuviel Aufwand mit Anpassungen für Opera getrieben wird, sollte wohl erstmal an Browser wie Safari gedacht werden. Aber vielleicht kommt ja mit Kestrel noch etwas Bewegung in die Sache, auch wenn es kein open source ist.

                    Ich bin inzwischen der Ansicht, dass man gar nicht mehr viel Aufwand treiben sollte, um bestimmte Browser zu befriedigen. HTML und CSS schreiben, das konform zum Standard ist und vom Validator als korrekt anerkannt wird, sollte als Mindestvoraussetzung genügen. Wenn jemand noch zusätzliche Energie investiert, um bekannte Schwächen einzelner, verbreiteter Browser zu berücksichtigen, ist das nett gemeint, aber nicht unbedingt Pflicht.

                    Schönen Abend noch,
                     Martin

                    --
                    Time's an illusion. Lunchtime doubly so.
                      (Douglas Adams, "The Hitchhiker's Guide To The Galaxy")
                    1. Hallo,

                      Ich bin inzwischen der Ansicht, dass man gar nicht mehr viel Aufwand treiben sollte, um bestimmte Browser zu befriedigen. HTML und CSS schreiben, das konform zum Standard

                      Die Idee ist eigentlich richtig und nach all dem Normierungs- und Valibemühungen
                      nur konsequent, aber bei vielen Projekten kaum praktikabel.

                      Sobald das CSS etwas komplexer wird, steigen nach Konqueror und Safari auch
                      zunehmend die Operas aus, IEs sind eh ein Fall für sich. Bleibt mit etwas
                      Glück der Firefox...

                      Also die 10 oder 20 % mit Firefox wenn es für ihn grad gut läuft wären mir
                      als erreichbares Publikum zu wenig.

                      Grüsse

                      Cyx23

                      1. Hi,

                        Ich bin inzwischen der Ansicht, dass man gar nicht mehr viel Aufwand treiben sollte, um bestimmte Browser zu befriedigen. HTML und CSS schreiben, das konform zum Standard
                        Die Idee ist eigentlich richtig und nach all dem Normierungs- und Valibemühungen nur konsequent, aber bei vielen Projekten kaum praktikabel.

                        ähm, man soll es natürlich nicht so übertreiben, dass einige Browser *gar nicht mehr* zurechtkommen.

                        Also die 10 oder 20 % mit Firefox wenn es für ihn grad gut läuft wären mir als erreichbares Publikum zu wenig.

                        Mir auch, obwohl ich die Zahl für zu niedrig angesetzt halte. Ich wollte eher darauf hinaus, dass die >50% mit IE, Opera, Safari, Konqueror, ... ja auch etwas sehen sollen, womit sie klarkommen. Nur bin ich der Meinung, dass kleine Darstellungsfehler, die durch Mängel eines Browsers entstehen, durchaus in Kauf genommen werden können.
                        Wenn Abstände und Ausrichtungen nicht so sind, wie sich der Autor wünscht; wenn Textboxen nicht genau die beabsichtigte Position einnehmen, z.B. untereinander sitzen anstatt nebeneinander; oder wenn eigentlich "fixed" geplante Elemente eben doch mitscrollen, ist das IMHO zumutbar.

                        Schönes Wochenende noch,
                         Martin

                        --
                        Der Gast geht solange zum Tresen, bis er bricht.
                        1. Hallo,

                          Wenn Abstände und Ausrichtungen nicht so sind, wie sich der Autor wünscht; wenn Textboxen nicht genau die beabsichtigte Position einnehmen, z.B. untereinander sitzen anstatt nebeneinander; oder wenn eigentlich "fixed" geplante Elemente eben doch mitscrollen, ist das IMHO zumutbar.

                          Pixelgenaues Layout ist mir meist nicht so wichtig, auch wenn ich entspr.
                          Wünsche bei vielen Projekten nachvollziehen kann.
                          Das von dir erwähnte Mitscrollen scheint mir auch i.d.R. zumutbar, dabei
                          würde ich z.Zt. natürlich dennoch nachhelfen wenn es etwa um den IE 6 geht.

                          Es gibt z.B. oft lästige Unterschiede bei der Vererbung oder Adressierung
                          von CSS-Eigenschaften, die schon bei relativ einfachen hover-Effekten
                          auftreten können, besonders wenn die Schaltfläche im HTML-Code etwas
                          entfernt von der betr. Info-Box "steht".

                          Hier z.B. ist rechts oben eine Schaltfläche (Kamerasymbol) um einige EXIF-Daten
                          etc. zum Bild anzuzeigen.
                          Ursprünglich war die Schaltfläche -als zur (vor/zurück) Bild-Steuerung usw.
                          gehörig- noch Teil der "Seitenmitte", der Infotext aber als eigentlich nicht
                          unmittelbar zum  Inhalt gehörig, sondern eher wie eine Fußnote, an anderer
                          Stelle im HTML-Code untergebracht.
                          Für IE war dann JavaScript nötig, und bei einigen anderen Browsern ging
                          kaum etwas, Safari z.B. hatte auch bei einfachster Abfolge Probleme.

                          Jetzt "hovert" als Notlösung in der oben verlinkten Version der Infotext
                          selbst auch noch statt nur die Schaltfläche, welche im HTML-Code beim
                          Infotext steht. Also nicht so umgesetzt wie es zunächst sein sollte.

                          Ist hier schon ok, weil weder EXIF-Daten noch die Schaltfläche so dominant
                          sein müssen, und den "tooltip" selbst werde ich auch noch ohne hovereffekt
                          hinkriegen.

                          Grundsätzlich gibt es aber u.U. selbst bei modernen Browsern immer noch ernome
                          Einschränkungen und keine Trennung von Layout und HTML-Code.

                          Aber vielleicht meintest du mit "man soll es natürlich nicht so übertreiben"
                          auch solche komplexe Verschachtelungen und Abfolgen wie bei einer ganz woanders
                          eingebauten Schalt- bzw. Hoverfläche.

                          Also die 10 oder 20 % mit Firefox wenn es für ihn grad gut läuft wären mir als erreichbares Publikum zu wenig.

                          Mir auch, obwohl ich die Zahl für zu niedrig angesetzt halte.

                          Wenn ich an network.prefetch-next denke, sind z.B. bei Statistiken vom SelfHTML
                          bzw. de.selfhtml.org einige FF abzuziehen.
                          Ansonsten aber halte ich FF, auch wenn mich einiges an dem Browser ziemlich
                          stört, für so gut, dass er auch sehr weit verbreitet sein mag:-)

                          Grüsse

                          Cyx23

              2. Moinmoin.

                Ich habe es mit [] hinbekommen. :-)
                Die Kompatibilität mit älteren Browsern ist übrigens schon wichtig, von daher muß ich das ganze eben gerade 3 x einbauen.

                Wenn es tatsächlich läuft ist es ja ok.

                Mit dem MSIE (document.all) klappt es. Opera ist mit dem document.all auch zufrieden (neben getElementBy...). Netscape 4 kann ich in Ermangelung dieses Browsers leider nicht testen, also hoffe ich mal, daß es mit ihm mit den Layers klappt, so wie eingebaut.

                Schönes WE
                Alexander

            2. Die Kompatibilität mit älteren Browsern ist übrigens schon wichtig, von daher muß ich das ganze eben gerade 3 x einbauen.

              Hast du das Skript mal mit einem älteren Browser getestet?

              Ich habe bis vor kurzen einen IE 4 genutzt und ich kann dir sagen, dass du mit dem nur ohne JS surfen kannst, da du ansonsten auf fast jeder Seite eine Fehlermeldung bekommst. Die, soweit ich mich erinnere, auch immer aufpoppt.

              Da dein Skriptschnipsel sowas enthielt: document.getElementById(), würde das ganze Skript weder im IE 4 nioch im NC 4 laufen, da die Fehlermeldung jegliche weitere Ausführung des Skriptes stoppt.

              Vergiß diese Browser einfach, keiner wird - wenn er diese Browser wirklich nutzen muss - dort JS eingeschaltet lassen. Du wirst dann wegen Fehlermeldungen und Abstürzen nicht lange Glücklich.

              Struppi.

    2. Mit document.all:
      if(document.all.name_ + nummer + [0].style.display == "none") { (...) } // fehlerhaft!

      if (eval("document.all.name_" + nummer + "[0].style.display == 'none'")){ (...) }

      Genauso für das andere Beispiel - sollte helfen.

      Mala abgesehen davon das document.all und document.layers völlig veraltet sind, wozu hier eval()?
      Das geht wesntlich einfacher und schneller ohne.
      document.all['name_' + nummer][0].style.display == 'none'

      Aber document.all brauchst du nur für den IE 4.

      Struppi.