Dynamisches Ändern eines Event-Handlers

  • Weiß jemand eine Möglichkeit, mittels JavaScript den Wert eines Event-Handlers dynamisch zu verändern, so dass auch der dumme IE das frisst??
    Kleines Beispiel zur Verdeutlichung:

    Code
    <img id="bild" onMouseOver="funktion1()">

    Ich möchte jetzt folgendes draus machen:

    Code
    <img id="bild" onMouseOver="funktion2()">

    Für den Firefox fallen mir viele Sachen ein:

    Code
    1) document.getElementById('bild').setAttribute('onMouseOver','funktion2()')
    
    
    2) document.getElementById('bild').attributes[0].nodeValue = 'funktion2()'

    und noch andere Dinge, die mir aber jetzt zu lang sind.
    Der IE ist natürlich mal wieder zu doof auch nur eine Möglichkeit davon zu kapieren:

    1) geht nicht, da IE versucht eine Eigenschaft onMouseOver des img-Objekts zu finden, die es natürlich nicht gibt

    2) geht nicht, da IE in attributes nicht etwa die verwendeten Attribute, sondern alle Attribute die möglich sind speichert (ca. 90).

    Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1

    Eine Theorie sollte so einfach wie möglich sein, aber nicht einfacher. (A. Einstein)

  • weil innerHTML nicht DOM-Standard ist. Zur Not würde ich mir schon irgendwie mit IE-Kram behelfen, ich wollte nur wissen ob es dafür auch eine standardgerechte Variante gibt, die von beiden Browsern interpretiert wird (innerHTML versteht FF ja sicher nicht, oder?), da ich eigentlich nicht vorhabe alles zweimal zu coden und vielleicht auch noch eine Browserweiche einbauen zu müssen.

    Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1

    Eine Theorie sollte so einfach wie möglich sein, aber nicht einfacher. (A. Einstein)

  • Man wird es kaum glauben. Aber innerHTML ist eine MS-Erfindung die alle grossen Browser (IE, Moz, Opera, KHTML) verstehen und faktisch auch eine sehr gute Erfindung ist (spart unmengen an schreibarbeit, wenn man einen bestimmten Teil der Seite umschreiben will. Wer das mal auf Standardweg versucht hat, weiss: man schreibt sich doof und dusselig). Einziger Haken dabei ist wirklich, dass es kein Webstandard ist.

  • ist innerHTML nicht eine Methode von document.all? sonst heißt es doch immer, dass das nicht funktioniert?! Oder hab ich da was falsch verstanden?

    egal, ich habe eine Möglichkeit gefunden, mit createAttribute und setAttributeNode.
    Komischerweise sollte dies auch dann funktionieren, wenn das Attribut vorher nicht existierte. Beispiel:

    Code
    <img src="lustigesbild.jpg">

    Script:

    Code
    moverevent = document.createAttribute("onMouseover");
     moverevent.nodeValue = "funktion1()";
     document.getElementsByTagName('img')[0].setAttributeNode(moverevent);


    Danach sollte es so heißen:

    Code
    <img src="lustigesbild.jpg" onMouseover="funktion1()">

    Das funktioniert aber nur bei Attributen, für die es eine Objekteigenschaft im DOM gibt (z.B. title statt onMouseover). Bei Attributen, zu denen es keine Eigenschaft gibt, muss das Attribut vorher existieren, kann aber auch leer sein. Das funktioniert dann sowohl im IE als auch im FF und ist dazu noch standardkonform.


    EDIT: Mist, zu früh gefreut, IE setzt zwar das Attribut (mit alert überprüft) aber es zeigt keine Wirkung??!! mal sehen ob ich das noch in den Griff bekomme.

    Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1

    Eine Theorie sollte so einfach wie möglich sein, aber nicht einfacher. (A. Einstein)

    Einmal editiert, zuletzt von brain (25. März 2005 um 23:20)

  • ach ich gebs fürs Erste auf, schließlich muss ich ja endlich mal weiterkommen. Also doch innerHTML benutzen... dieser IE is einfach zu dämlich...
    aber falls jemandem doch noch spontan eine DOM-konforme Lösung einfällt - immer her damit!

    Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1

    Eine Theorie sollte so einfach wie möglich sein, aber nicht einfacher. (A. Einstein)

  • is schon klar ;) man bildet sich ja auch selber :D

    Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1

    Eine Theorie sollte so einfach wie möglich sein, aber nicht einfacher. (A. Einstein)