document.getElementById beim im Internet Explorer
Holger Ahlrichs
- javascript
Hallo, wir haben folgendes Script für eine Art Bannerwechsel erstellt.
Das Script wechselt die Ebenen automatisch durch und kann auch manuell aufgerufen werden.
<script language="JavaScript" type="text/javascript">
<!--
function einblenden(div) {
einblendenInternal(div, 1);
}
var aktivesDiv = "promo";
function einblendenInternal(div, killTimer) {
with(document.getElementById(div).style){
if(display=="none"){
display="inline";
if (aktivesDiv!="none") {
document.getElementById(aktivesDiv).style.display="none";
}
aktivesDiv = div;
} else {
//display="none";
}
}
if (killTimer){
window.clearInterval(timerPropmo);
}
}
var timerPropmo = window.setInterval("nextPromo()", 5000);
function nextPromo(){
if (aktivesDiv == "promo") {
einblendenInternal("events",0);
} else if (aktivesDiv == "events") {
einblendenInternal("news",0);
} else {
einblendenInternal("promo",0);
}
}
//-->
</script>
Hier der manuelle Aufruf der über eine Map erfolgt:
<map name="Infobox">
<area shape="rect" coords="2,1,125,18" href="#" alt="Promotions" onClick="einblenden('promo'); return false;">
<area shape="rect" coords="128,1,237,18" href="#" alt="Events" onClick="einblenden('events'); return false;">
<area shape="rect" coords="241,1,352,18" href="#" alt="News" onClick="einblenden('news'); return false;">
</map>
Jetzt das Problem:
IM Firefox funktioniert alles bestens.
IM IE meckert er folgendes:
Fehler : Objekt erforderlich
Er verweist dabei auf die Zeile mit folgendem Inhalt:
"with(document.getElementById(div).style){"
Kann mir hierbei einer helfen?
Vielen Dank und Gruß
Holger Ahlrichs
Beim IE mußt Du generell vorsichtig sein, wenn Du bereits vorbelegte Namen für Variablen etc. verwenden willst. Benenne "div" an dieser Stelle um, denn es kollidiert mit dem Tag im selben Namensraum aufgrund der mangelnden Trennung im IE.
Gruß, LX
Hier noch ein unabhängiger, allgemeiner, gut gemeinter Tipp: Vermeide with
wie der Teufel das Weihwasser - gerade bei Objekten mit möglicherweise unbekannten Eigenschaften weißt du nicht immer, ob du eine Eigenschaft des Objekts, eine Eigenschaft des globalen Objekts oder gar eine Eigenschaft des entsprechenden Objekt-Prototypen veränderst!
Du kannst mit der Deklaration lokaler Variablen ebenfalls eine gewisse Schreibarbeit sparen und es ist deutlicher, was eigentlich verändert wird.