IE reagiert nicht auf onclick-Action
wizzy
- javascript
0 Gunnar Bittersmann0 Antipitch0 Der Martin0 Antipitch0 Der Martin0 Jonathan
0 Struppi
Hallo,
mit folgendem Script lade ich mehrere Bilder in meine Seite. (hier als Beispiel nur für ein Bild. Im Firefox und in Opera funktioniert es einwandfrei, aber der IE macht nicht alles. Er lädt die Bilder rein und zeigt sie an, aber wenn ich drauf klicke, passiert nix.
Woran könnte das liegen?
Hier mal das Script:
var newPicture = document.createElement("img"); //neues Bild
var newSource = document.createAttribute("src"); //Bildquelle
var newAction = document.createAttribute("onclick"); //Action
newSource.nodeValue = "pictures/preview/smallPic.jpg"; //Source
newAction.nodeValue = "window.document.images[0].src = 'pictures/bigPic.jpg';" ; //Action
var myDiv = document.getElementById("myDiv"); //Target
newPicture.setAttributeNode(newSource);
newPicture.setAttributeNode(newAction);
myDiv.appendChild(newPicture); Bild einfügen
Ist denn so was wie "window.document.images[0].src" mit dem IE nicht kompatibel?
Gibt's so was wie den Firebug oder Web Developer auch für den IE, damit man solche Fehler direkt debuggen kann?
Danke schon mal,
wizzy
Hello out there!
Ist denn so was wie "window.document.images[0].src" mit dem IE nicht kompatibel?
Doch, aber createAttribute()/setAttributeNode() nicht. Warum auch so kompliziert?
var newPicture = document.createElement("img"); //neues Bild
newPicture.src = "pictures/preview/smallPic.jpg"; //Source
newPicture.onclick = function ()
{
window.document.images[0].src = 'pictures/bigPic.jpg'; //Action
};
Gibt's so was wie den Firebug oder Web Developer auch für den IE, damit man solche Fehler direkt debuggen kann?
See ya up the road,
Gunnar
Hi Gunnar,
kurze Rückfrage:
Ist denn so was wie "window.document.images[0].src" mit dem IE nicht kompatibel?
Doch, aber createAttribute()/setAttributeNode() nicht.
^ ^
Meinst du das generell? Bzw. welchen IE meinst du (für 6 u. 7 wär mir das neu)?
Gruß
Antipitch
Hallo,
Doch, aber createAttribute()/setAttributeNode() nicht.
^ ^
Meinst du das generell? Bzw. welchen IE meinst du (für 6 u. 7 wär mir das neu)?
sagen wir's anders: Der IE kennt zwar createAttribute() und Co., hat aber Probleme mit deren Anwendung. Das direkte Setzen der entsprechenden Objekt-Eigenschaft ist daher nicht nur einfacher (IMHO), sondern auch weniger problematisch.
Ciao,
Martin
Hi Martin,
danke für die Antwort. Beispiel für 'ne problematische Anwendung fällt dir nicht zufällig spontan ein, oder (neulich mal benutzt u. generelles Interesse, wollte die Antwort für den vorliegenden Fall nicht in Frage stellen ;-)
Gruß
Antipitch
Hi,
Beispiel für 'ne problematische Anwendung fällt dir nicht zufällig spontan ein, ...
der OP hat doch ein feines Beispiel geliefert, oder nicht?
Ciao,
Martin
Hi Martin,
hätte gedacht, dass das in diesem Fall eher an der Erzeugung bereits vorhandener Attribute liegen könnte (siehe Struppi's posting). Aber gerade nochmal durchgespielt, die Attribute gelöscht und neu gesetzt. Handler Attribut wird zwar mit Wert in der Dev. Toolbar angezeigt, aber bewirken tut er nichts (nicht mal ein einfaches alert, scheint also weniger daran zu liegen, dass in diesem Fall das erzeugte Element das event target war). Wieder was gelernt, Microsoft at its best...
Gruß
Antipitch
Hallo Antipitch,
danke für die Antwort. Beispiel für 'ne problematische Anwendung fällt dir nicht zufällig spontan ein
Ganz prinzipiell hat der IE Probleme bei Sachen, die man zusätzlich über vordefinierte Eigenschaften lösen kann. Ich hab jetzt nicht alles getestet, aber heiße Kandidaten wären hier Eventhandler, class-Attribute, style-Eigenschaften usw.
Im IE dürften also z.B. objekt.onClick, objekt.className, objekt.style mehr oder weniger funktionieren während ein setzen über entsprechende Attribute vermutlich nicht zum gewünschten Effekt führt. Der IE speichert dann z.B. das neue Attribut (das man z.B. wieder mit getAttribute abrufen kann), aktualisiert aber den Eventhandler nicht oder ändert den Style nicht. Ob das im IE7 besser geworden ist kann ich nicht sagen, ich gehe aber eher nicht davon aus.
Jonathan
Nur zur Ergänzung.
var newPicture = document.createElement("img"); //neues Bild
Ein Bild hat bereits diese Attribute:
var newSource = document.createAttribute("src"); //Bildquelle
var newAction = document.createAttribute("onclick"); //Action
Du kannst dir mal die Liste aller Attribute ausgeben lassen:
var newPicture = document.createElement("img"); //neues Bild
var attr = [];
for(var a in newPicture) attr.push(a);
alert(
'Eigenschaften eines IMAGE Objektes:\n' + attr.join('\n')
);
d.h. es ist nicht nötig diese zu erzeugen, daher kannst du ohne Probleme den von Gunnar vorgeschlagenen Weg gehen.
Struppi.