Jogi: InternetExplorer Problem bei Elementzugriff über ID

Hallo,

ich bin leicht ratlos inzwischen, maybe habe ich auch nen Brett vorm Kopp..

Ich bin auf einem Zopewebserver unterwegs, meine HTML Seiten werden über Pagetemplates generiert.
Es gibt eine Javascript Funktion, die derzeit im InternetExplorer6.0 Probleme bereitet.

Es geht um folgende Checkbox
<input
    type="checkbox" checked="checked"
    onclick="enableCheckbox(this.checked, this.name)"
    name="property_showHistory" />

es gibt das passende Element mit:
<span
    id="property_showHistory"></span>

Die Funktion enableCheckbox(..) enthält in Zeile xy folgende Anweisung:
document.getElementById(checkboxName).innerText = "kritische &Auml;nderung";

Kommt es nun im InternetExplorer zum Funktionsaufruf kommt die Fehlermeldung
"Es ist ein Laufzeitfehler aufgetreten. [bla]
Zeile: xy
Fehler: Unbekannter Laufzeitfehler"

Schreibe ich ins fragliche span-Tag bereits vorher einen Text, und lasse mir ihn mit
alert(document.getElementById("property_showHistory").innerText) anzeigen, so seh ich gar nix
alert(document.getElementById("property_showHistory")) bringt "[object]" zu Tage

verwende ich also nicht den Inhalt der Variable sondern verwende genau den String "property_showHistory", so geht es auch nicht.
Ändere ich nun in meinem Pagetemplate an fragl. Stelle die id vom span-Tag auf "property_showHistoru" (U!!!!! am Ende) und ändere meine getElementById-Anweisung ebenfalls auf "property_showHistoru", dann klappt es!!
Ok, ändere ich nun den Namen der Checkbox (siehe oben) auf "property_showHistoru" und lasse den Zugriff wieder über den Inhalt der übergebenen Variablen laufen, dann klappt es NICHT mehr!
Versuche ich im Folgenden wieder genau mit dem String, also alert(document.getElementById("property_showHistoru").innerText)
den Text der im span-Tag steht auszugeben (hat ja vorher gefunzt), dann kriege ich nen kleinen Anfall, denn es klappt nicht mehr!
Die id "property_showHistoru" verweist fortan wie von Zauberhand auf ein sonst-wo-Objekt, nur nicht das was ich haben will.

  • temporäre Daten habe ich gelöscht, änderte nichts
  • meine Idee evt. ist der Inhalt der Variablen kein richtiger String sonst was, habe ich mit
    alert(document.getElementById(new String(checkboxName)).innerText)
    gegengetestet und auch dieses tut nicht..
  • das Javascript hat keine Fehler, mit Lint getestet..

jemand eine Idee??

  1. ich bin leicht ratlos inzwischen, maybe habe ich auch nen Brett vorm Kopp..

    ich sach mal ja ;-)

    Es geht um folgende Checkbox
    <input
        type="checkbox" checked="checked"
        onclick="enableCheckbox(this.checked, this.name)"
        name="property_showHistory" />

    Wozu this.name?
    Wenn du der Funktion nur this übergibst, brauchst du in der Funktion nicht mehr über

    document.getElementById(checkboxName).innerText = "kritische &Auml;nderung";

    darauf zuzugreifen, zumal das falsch ist und innerText auch, wenn überhaupt dann
    .value - Wieso sollte eine checkbox einen innerText haben???
    innerText ist darüber hinaus auch IE only, es gibt mehrere gleichwertige Methoden die in allen Browsern funktikonieren.

    Struppi.

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

      zumal das falsch ist und innerText auch, wenn überhaupt dann
      .value - Wieso sollte eine checkbox einen innerText haben???

      Er will ja gar nicht auf die Checkbox zugreifen, sondern auf den Span, dessen ID dem Namen der Checkbox entspricht.
      Nur genau diese Namens-/ID-Gleichheit macht im IE m.W. Probleme.

      gruß,
      wahsaga

      --
      /voodoo.css:
      #GeorgeWBush { position:absolute; bottom:-6ft; }
  2. hi,

    alert(document.getElementById("property_showHistory")) bringt "[object]" zu Tage

    Und was bringt
    alert(document.getElementById("property_showHistory").nodeName)
    ?

    Würde mich nicht wundern, wenn das "input" - und nicht dein "span", den du an dieser Stelle erwartest.

    Der IE greift AFAIK über getElementById auch auf Elemente mit name-Attribut zu.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Und was bringt
      alert(document.getElementById("property_showHistory").nodeName)
      ?

      INPUT :P

      danke!! das wars ;)
      -_-

    2. Hi,

      Der IE greift AFAIK über getElementById auch auf Elemente mit name-Attribut zu.

      Vielleicht wegen

      "Note. The id attribute shares the same name space as the name attribute when used for anchor names. "

      (http://www.w3.org/TR/html4/struct/global.html#id-and-class, ganz am Ende des Abschnitts, direkt vor 7.5.3)

      cu,
      Andreas

      --
      Warum nennt sich Andreas hier MudGuard?
      O o ostern ...
      Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
      1. hi,

        Der IE greift AFAIK über getElementById auch auf Elemente mit name-Attribut zu.

        Vielleicht wegen
        "Note. The id attribute shares the same name space as the name attribute when used for anchor names. "

        Ja, eine derart eigenartige Interpretation ist MS durchaus zuzutrauen.

        Sie "werben" ja auch fast noch mit dieser Art von Feature:
        MSDN: getElementById:
        "Returns the first object with the same ID attribute as the specified value.
        If the ID value belongs to a collection, the getElementById method returns the first object in the collection."

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Der IE greift AFAIK über getElementById auch auf Elemente mit name-Attribut zu.

          Vielleicht wegen
          "Note. The id attribute shares the same name space as the name attribute when used for anchor names. "

          Ja, eine derart eigenartige Interpretation ist MS durchaus zuzutrauen.

          So ganz ne Logik dahinter scheint es aber nicht zu geben, oder?
          Gerade mal folgenden Testcode geschrieben:
          ---
          <html>
              <head>
                  <title>bla</title>
              </head>
              <body>
                  <script language="javascript">
                      function bla() {
                          document.getElementById("eintest").style.borderColor = "red";
                      }
                  </script>
                  <input type="button" onclick="javascript:bla()" value="test" />
                  <div style="width: 200px; height: 200px;">
                      <div name="eintest" style="border: 1px solid; margin: 10px;">div mit name</div>
                      <div id="eintest" style="border: 1px solid; margin: 10px;">div mit id</div>
                  </div>
              </body>
          </html>
          ---
          der ie umrahmt des div mit der Id rot, und nicht des mit dem Namen, obwohl es zuerst im Dokument vorkommt

          1. hi,

            So ganz ne Logik dahinter scheint es aber nicht zu geben, oder?

            Doch ...

            der ie umrahmt des div mit der Id rot, und nicht des mit dem Namen, obwohl es zuerst im Dokument vorkommt

            Div hat ja auch kein name-Attribut.
            Input aus deinem ersten Beispiel hat aber schon.

            gruß,
            wahsaga

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }
            1. Div hat ja auch kein name-Attribut.
              Input aus deinem ersten Beispiel hat aber schon.

              aja stimmt ja -
              zu schnell gedacht ;)