Lutz: Objekte in IE6.x und Opera 7.2x

Hallo Leute,

habe gesucht und nix gefunden, was mir folgenden Effekt erklären bzw. die Lösung hierzu geben könnte.

<code>

<html>
<head>
 <script language="javascript" type="text/javascript">
     function machwas()
  {
      var divObj = document.getElementById("ichbinwas");
      document.getElementById("ausgabe").value = divObj;
      divObj.style.setAttribute("visibility","visible",false);
  }
 </script>
</head>
<body onload="javascript:machwas()">

<div style="visibility:hidden;" id="ichbinwas">Hallo Leute</div>

<input type="textbox" id="ausgabe" value="nochnix" size="50">
</body>
</html>

</code>

Während IE6.x brav das div-Element anzeigt und in die Textbox schön [object] schreibt, mach Opera nur Mist! Es weigert sich das div-Element anzuzeigen:
TypeError:
'Expression did not evaluate to a function object: divObj.style.setAttribute'

Ist das jetzt ein Object oder nicht? Opera benennt das Objekt: [object HTMLDivElement] statt [object]....?!?!?!?

Was habe ich gelacht...

Kann mir jemand helfen, brauche es wirklich dringend...

thx

L

  1. gruss Lutz

    TypeError:
    'Expression did not evaluate to a function object:
    divObj.style.setAttribute'

    da hat opera recht - mozilla ist auch nicht einverstanden
       und meldet korrekterweise denselben fehler;

    Während IE6.x brav das div-Element anzeigt und in die Textbox
    schön [object] schreibt, mach Opera nur Mist! Es weigert sich das
    div-Element anzuzeigen:

    hier verwechselst Du ursache und wirkung;

    Ist das jetzt ein Object oder nicht? Opera benennt das Objekt:
    [object HTMLDivElement] statt [object]....?!?!?!?

    mozilla tut dies ebenfalls ... die browserhersteller duerfen
       die anbindung des DOM an die javascript-api des browsers
       recht frei gestalten, wobei mozilla die objekte des DOM
       am konsequentestens der javascript-objekthirarchie anpasst;
       msie faellt da wieder mal ab, opera liegt irgendwo dazwischen,
       aber doch naeher zu mozilla als zum msie;

    habe gesucht und nix gefunden, was mir folgenden Effekt erklären
    bzw. die Lösung hierzu geben könnte.

    Was habe ich gelacht...

    Du haettest besser gruendlicher debuggt:

    <html>
      <head>
        <title>HTMLElementObjekte.html</title>
        <script type="text/javascript">
          function machwas() {
            var divObj = document.getElementById("ichbinwas");

    alert(divObj); // bedeutet: alert(divObj.toString());

    alert(divObj.constructor);
            /*
              die erzwungene ausgabe eines objektes als string -
              in diesem fall eines div-knotens, welcher sowohl
              in mozilla als auch in opera als "HTMLDivElement"
              umgesetzt ist - hat die sofortige anwendung der
              fuer dieses objekt eingebauten "toString"-methode
              zur folge;
              fuer den msie lautet das ergebnis nun einfach mal
              [object];
            */
            document.getElementById("ausgabe").value = divObj;

    alert(typeof divObj.style.setAttribute);
          /*
            "object" in msie, "undefined" in mozilla und opera:

    voellig korrekt, dass sich mozilla und opera ueber
            die folgende auskommentierte zeile beschwert haben;
          */
          //divObj.style.setAttribute("visibility","visible",false);

    divObj.style.visibility = "visible"; // geht doch!
          }
        </script>
      </head>
      <body onload="machwas()">
        <div style="visibility:hidden;" id="ichbinwas">Hallo Leute</div>
        <input type="textbox" id="ausgabe" value="nochnix" size="50">
      </body>
    </html>

    by(t)e by(t)e - peterS. - pseliger@gmx.net

    --
    sh:| fo:) ch:? rl:| br:& n3:} n4:# ie:| mo:{ va:| de:[ zu:] fl:) ss:) ls:& js:)
    1. many many thank you's

      man(n) kann ja nicht alles wissen...

      grütze aus nermberch

      L

  2. Hallo,

    divObj.style.setAttribute("visibility","visible",false);

    Während IE6.x brav das div-Element anzeigt und in die Textbox schön [object] schreibt, mach Opera nur Mist! Es weigert sich das div-Element anzuzeigen:
    TypeError:
    'Expression did not evaluate to a function object: divObj.style.setAttribute'

    .style.setAttribute() ist eine nicht-standardisierte Erfindung von Microsoft, die Opera nicht unterstützt. Die standardisierte Variante würde divObj.style.setProperty('visibility', 'visible', ''); lauten. Die versteht Opera, aber MSIE nicht. Darüber brauchst du dir aber keine Gedanken machen, weil du einfach divObj.style.visibility='visible'; notieren kannst und damit beide Browser (und andere relevante) erreichst.

    Mathias