Jonas Koch Bentzen <ingen.email@eksempel.dk> writes:
> *Skal* event-handleren have præcis ét argument (handlingen), eller kan man
> godt lave funktionen helt uden argumenter?
Javascript er meget tilgivende. Hvis du giver for mange argumenter til
en funktion, så er de bare tabt, og hvis du giver for få, så er resten
bare "undefined".
> Hvordan pokker laver man hele onchange-tingen i en funktion, hvor man skal
> kunne putte forskellige onchange'r ind?
>
> function lavRullegardinmenu(onChange) {
> noget = document.createElement("select")
> noget.addEventListener("change", onChange, false)
> }
Den virker fint ...
> lavRullegardinmenu("funktionDerHaandtererChange")
...., men ikke med en streng som argument.
> Dér kommer jo problemet: Den onChange, jeg angiver som event-handler, er en
> streng med navnet på en funktion, der skal håndteres change. Hvad gør jeg
> for at få browseren til at forstå, at den skal køre
> funktionDerHaandtererChange() på onchange?
Du kunne lade være med at bruge strenge til det, det ville være
optimalt. Man kan sende funktioner rundt lige som strenge, så i stedet
for strengen "funktionDerHaadntererChange" kan man bare skrive det
uden anførselstegn, og så giver det funktionen som en værdi.
Alternativt, hvis man nu kun har en streng, så kan man bruge
eval-funktionen. Altså, hvis onChange er en streng, så skriv
noget.addEventListener("change", function(){eval(onChange+"()");}, false)
Den metode gør dog at man ikke kan fjerne handleren igen (er det
"removeEventListener" den hedder?). For at fjerne en handler skal man
give de samme argumenter som da man add'ede den, og det betyder at det
skal være den *samme* funktion man sender med, defineret på samme
tidspunkt, og ikke blot en magen til. Hvis man vil omgå det, så skal
man lave noget mere kode.
/L
--
Lasse Reichstein Nielsen - lrn@brics.dk
Ph.D. i datalogi søger stilling som software-udvikler i Øst- eller
Nordjylland. Curriculum Vitae: <URL:
http://www.brics.dk/~lrn/cv.html>