• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Dynamisches zuweisen von Eventhandlern - Parameterübergabe by Ref??

Status
Für weitere Antworten geschlossen.

Player140

Neues Mitglied
Hi,

ich versuche, meine Eventhandler dynamisch zu generieren, so dass ich sie nicht im HTML angeben muss.
Dabei gehts darum, dass alle Menü-Links ein mouseover-Event bekommen sollen.
Mein Code funktioniert auch so weit, dass das Event registriert wird für den jeweiligen Link, jedoch übergebe ich als aufzurufende Methode an das neu registrierte Event auch einen Parameter(Wert in Variable "linkImgName") mit für die aufzurufende Methode "changePic" beim mouseover-Event, der für jeden Menüeintrag anders ist.

Code:
function addMenuOnMouseoverEvents()
{
    var menuLinks = document.getElementById("mainNav").getElementsByTagName("a")
    var i = 0;

    for (var i = 0; i < menuLinks.length; i++)
    {
        var link = menuLinks[i];
        var linkImgName = link.id.substr(link.id.lastIndexOf("_")+1);   //Name des Bildes aus ID ermitteln.
        
        addEvent( link, 'mouseover', function(){ changePic(linkImgName); });
    }    
}



/**
* John Resig, erklärt bei quirksmode: http://ejohn.org/projects/flexible-javascript-events/
*/
function addEvent( obj, type, fn ) {
  if ( obj.attachEvent ) {
    obj['e'+type+fn] = fn;
    obj[type+fn] = function(){obj['e'+type+fn]( window.event );}
    obj.attachEvent( 'on'+type, obj[type+fn] );
  } else
    obj.addEventListener( type, fn, false );
}
function removeEvent( obj, type, fn ) {
  if ( obj.detachEvent ) {
    obj.detachEvent( 'on'+type, obj[type+fn] );
    obj[type+fn] = null;
  } else
    obj.removeEventListener( type, fn, false );
}

"linkImgName" ändert sich also in jedem Durchlauf der Schleife. Am Ende rufen ALLE registrierten onmouseover-Events die Funktion "changePic()" mit dem Wert auf, der beim letzten Schleifen-Durchlauf in "linkImgName" befand.
Sieht also so aus, als würden die Werte als Reference u. nicht als Value übergeben werden, zumindest der fn. Wie kann ich das so umstellen, dass der wert (Die Funktion die an "fn" übergeben wird) nur als Value übergeben wird? oder muss ich mir einen anderen Ansatz suchen?
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben