/ Forside / Teknologi / Udvikling / Java Scripts / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java Scripts
#NavnPoint
molokyle 5410
Klaudi 2799
smorch 2439
kim 1360
Harlekin 1134
bentjuul 984
gibson 800
severino 695
Random 675
10  konsulent.. 626
DOM + onchange + lortebrowser
Fra : Jonas Koch Bentzen


Dato : 08-02-03 22:13

Hvad kan man gøre for at sætte en onchange på en rullegardinmenu i Explorer,
hvis man vil bruge standardkode? Jeg har prøvet følgende - alle virker i
Mozilla og andre browsere, ingen virker i Explorer:

menu.setAttribute("onchange", "test2()")

menu.setAttribute("onChange", "test2()")

menu.addEventListener("change", test2, false)

Man kan selvfølgelig bruge menu.onchange = test2, men den vil jeg helst
undgå - den er ikke standard. Nogen forslag?

--
Jonas Koch Bentzen

 
 
Lasse Reichstein Nie~ (09-02-2003)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 09-02-03 01:47

Jonas Koch Bentzen <ingen.email@eksempel.dk> writes:

> Hvad kan man gøre for at sætte en onchange på en rullegardinmenu i Explorer,
> hvis man vil bruge standardkode? Jeg har prøvet følgende - alle virker i
> Mozilla og andre browsere, ingen virker i Explorer:
....
> Man kan selvfølgelig bruge menu.onchange = test2, men den vil jeg helst
> undgå - den er ikke standard. Nogen forslag?

Desværre ikke. Jeg har præcist de samme erfaringer. Det er slet ikke
usandsynligt at der ikke er en løsning.

/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>

Jonas Koch Bentzen (09-02-2003)
Kommentar
Fra : Jonas Koch Bentzen


Dato : 09-02-03 09:24

Lasse Reichstein Nielsen wrote:

> Jonas Koch Bentzen <ingen.email@eksempel.dk> writes:
>
>> Hvad kan man gøre for at sætte en onchange på en rullegardinmenu i
>> Explorer, hvis man vil bruge standardkode? Jeg har prøvet følgende - alle
>> virker i Mozilla og andre browsere, ingen virker i Explorer:
> ...
>> Man kan selvfølgelig bruge menu.onchange = test2, men den vil jeg helst
>> undgå - den er ikke standard. Nogen forslag?
>
> Desværre ikke.

Pokkers! Nå, men tak for svaret.

Forresten, hvis man bruger .addEventListener() eller .onchange, hvordan kan
man så tilføje argumenter til den funktion, der skal håndtere begivenheden?
Altså

noget.onchange = test(argument1)

Kan det lade sig gøre?

--
Jonas Koch Bentzen

Lasse Reichstein Nie~ (09-02-2003)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 09-02-03 10:40

Jonas Koch Bentzen <ingen.email@eksempel.dk> writes:

> noget.onchange = test(argument1)
>
> Kan det lade sig gøre?

Brug en wrapper:
noget.onchange = function (ev) {test(argument);};

IE overfører *stadig* ikke eventen som argument til handleren, men
gemmer den som den globale window.event. Hvis man faktisk vil bruge
eventen skal man til at lave sjov som
ev = ev ? ev : window.event;
Suk!
/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>

Jonas Koch Bentzen (09-02-2003)
Kommentar
Fra : Jonas Koch Bentzen


Dato : 09-02-03 10:48

Lasse Reichstein Nielsen wrote:
>
> IE overfører *stadig* ikke eventen som argument til handleren

Jeg skal dog ikke bruge handlingen til noget, så er det okay.

Lige to spørgsmål mere:

*Skal* event-handleren have præcis ét argument (handlingen), eller kan man
godt lave funktionen helt uden argumenter?

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)
}

lavRullegardinmenu("funktionDerHaandtererChange")

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?

--
Jonas Koch Bentzen

Lasse Reichstein Nie~ (09-02-2003)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 09-02-03 12:42

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>

Jonas Koch Bentzen (09-02-2003)
Kommentar
Fra : Jonas Koch Bentzen


Dato : 09-02-03 12:55

Lasse Reichstein Nielsen wrote:
>
> 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

Det virker tilsyneladende - tak.

--
Jonas Koch Bentzen

Jonas Koch Bentzen (09-02-2003)
Kommentar
Fra : Jonas Koch Bentzen


Dato : 09-02-03 10:26

Lasse Reichstein Nielsen wrote:

> Jonas Koch Bentzen <ingen.email@eksempel.dk> writes:
>
>> Hvad kan man gøre for at sætte en onchange på en rullegardinmenu i
>> Explorer, hvis man vil bruge standardkode? Jeg har prøvet følgende - alle
>> virker i Mozilla og andre browsere, ingen virker i Explorer:
> ...
>> Man kan selvfølgelig bruge menu.onchange = test2, men den vil jeg helst
>> undgå - den er ikke standard. Nogen forslag?
>
> Desværre ikke. Jeg har præcist de samme erfaringer. Det er slet ikke
> usandsynligt at der ikke er en løsning.

Løsningen for mig blev følgende, der først forsøger med standardmetoden og
dernæst bruger noget, Explorer forstår - så skulle alle vist være
tilfredse:

try {
menu.addEventListener("change", funktion, false)
}
catch (exception) {
menu.onchange = funktion
}

--
Jonas Koch Bentzen

Lasse Reichstein Nie~ (09-02-2003)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 09-02-03 10:38

Jonas Koch Bentzen <ingen.email@eksempel.dk> writes:

> Løsningen for mig blev følgende, der først forsøger med standardmetoden og
> dernæst bruger noget, Explorer forstår - så skulle alle vist være
> tilfredse:
>
> try {
> menu.addEventListener("change", funktion, false)
> }
> catch (exception) {
> menu.onchange = funktion
> }

Hvis du vil have *alle* med, så forstår Netscape 4 ikke try/catch :)
Man kan evt. nøjes med at tjekke for eksistensen af menu.addEventListener

/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>

Jonas Koch Bentzen (09-02-2003)
Kommentar
Fra : Jonas Koch Bentzen


Dato : 09-02-03 10:39

Lasse Reichstein Nielsen wrote:
>
> Hvis du vil have *alle* med, så forstår Netscape 4 ikke try/catch :)

Nej, okay, jeg mente alle moderne browsere :)

--
Jonas Koch Bentzen

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408929
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste