Objekte in IE6.x und Opera 7.2x
Lutz
- javascript
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
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
many many thank you's
man(n) kann ja nicht alles wissen...
grütze aus nermberch
L
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