wizzy: IE reagiert nicht auf onclick-Action

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

  1. 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?

    Ja.

    See ya up the road,
    Gunnar

    --
    „Und [dieses Forum] soll […] auch ein Fachforum bleiben und kein Psychologieforum werden.“ (Kirsten Evers)
    1. 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

      1. 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

        --
        Dieser Satz wurde in mühsamer Kleinstarbeit aus einzelnen Wörtern zusammengesetzt.
          (Hopsel)
        1. 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

          1. 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

            --
            Moskito, ergo summ.
            1. 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

          2. 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

  2. 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.