/ 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
Script event-handler overskriver inline-di~
Fra : René Lønstrup


Dato : 04-01-04 01:18

Hejsa,

Efter at have vredet hjernen pga. dette problem, må jeg hellere spørge hér
inden jeg helt opgiver ;)

Jeg har et par form-felter som har nogle scripts tilknyttet via onblur, ala
dette:
<input type="text" name="felt" id="felt" onblur="alert('hej');" />
- Dette virker jo fint, stående for sig selv..

Jeg har derudover et javascript der tilføjer lidt flere funktioner til
elementets blur-event, ala:
document.getElementById("id").onblur = noget;
function noget() {
alert("hej igen");
}

Nu er problemet så, at ovenstående javascript 'overskriver' mine inline
blur-events. Forstået på den måde, at der kun udføres den funktion der
specificeres i scriptet (alerter "hej igen"), mens funktionen i html-koden
ignoreres (hvor den burde alerte "hej").. Er der en måde at undgå dette på,
udover at gå ind og skrive <onblur="noget(); alert("hej")"> på alle
felterne?


--
Mvh René Lønstrup
min web: http://www.rel7star.dk?r=usenet
min email: se om du kan regne dén ud..



 
 
Lasse Reichstein Nie~ (04-01-2004)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 04-01-04 02:00

"René Lønstrup" <news@rel6+1star.dk> writes:

> Jeg har et par form-felter som har nogle scripts tilknyttet via onblur, ala
> dette:
> <input type="text" name="felt" id="felt" onblur="alert('hej');" />
> - Dette virker jo fint, stående for sig selv..

og

> document.getElementById("id").onblur = noget;
> function noget() {
> alert("hej igen");
> }

> Nu er problemet så, at ovenstående javascript 'overskriver' mine inline
> blur-events.

Nemlig. Det er jo det du beder om :) Elementet er et objekt. Det har
kun en onblur-egenskab, og du ændrer dens værdi. Det overskriver den
gamle værdi

> Forstået på den måde, at der kun udføres den funktion der
> specificeres i scriptet (alerter "hej igen"), mens funktionen i html-koden
> ignoreres (hvor den burde alerte "hej").. Er der en måde at undgå dette på,
> udover at gå ind og skrive <onblur="noget(); alert("hej")"> på alle
> felterne?

Flere måder, afhængigt af hvilke browsere det skal virke i.

Problemet er jo, at der kun er en onblur-egenskab. Det er ikke særlig
smart, så derfor har folk tilføjet metoder der kan putte mere end en
handler på hver event.

Den "autoriserede", fra W3C DOM 2, er

document.getElementById("id").addEventListener("blur",noget,false);

Den tilføjer endnu en handler der lytter på "blur"-eventen. Du ved
*ikke* om den bliver udført før eller efter den der allerede er sat.

Den virker naturligvis kun i moderne browsere (og altså ikke i nogen
version af Internet Explorer). IE har så sin egen måde, som man kan bruge
i stedet:

document.getElementById("id").attachEvent("onblur",noget);

Hvis det også skal virke i andre ældre browsere (hvilket jeg tvivler på,
siden du bruger getElementById), så bliver du nødt til selv at kalde
begge funktioner:

var elem = document.getElementById("id");
var oldOnBlur = elem.onblur;
if (oldOnBlur) {
elem.onblur = function(event){var res = oldOnBlur(event);
return noget(event)&&res;};
} else {
elem.onblur = noget;
}


Det kan alt sammen samles i en enkelt funktion:
---
function setEventHandler(elem,type,funktion) {
if (elem.addEventListener) {
elem.addEventListener(type,funktion,false);
} else if (elem.attachEvent) {
elem.attachEvent("on"+type,funktion);
} else {
var ontype = "on"+type;
var old = elem[ontype];
if (old) {
elem[ontype]= function(event) {
var res = old(event);
return funktion(event)&&res;
};
} else {
elem[ontype] = funktion;
}
}
}
---
Du kan så kalde den som
---
setEventHandler(document.getElementById("id"),"blur",noget);
---

Held og lykke.
/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'

René Lønstrup (04-01-2004)
Kommentar
Fra : René Lønstrup


Dato : 04-01-04 19:41

Lasse Reichstein Nielsen wrote:
>> Nu er problemet så, at ovenstående javascript 'overskriver' mine
>> inline blur-events.
>
> Nemlig. Det er jo det du beder om :)

Heh, ja, det gættede jeg næsten også var problemet :) - Jeg havde bare ingen
idé hvad man ku' gøre ved det

> Hvis det også skal virke i andre ældre browsere (hvilket jeg tvivler
> på, siden du bruger getElementById)

Nej, jeg gider ikke rigtigt spilde tid på gamle forældede browsere, så det
er ikke strengt nødvendigt (men nu du har været så flink at implementere det
også, kan det jo ligeså godt tages med ;) )

> Du kan så kalde den som
> ---
> setEventHandler(document.getElementById("id"),"blur",noget);

Tak ska' du ha', - det virker jo som sædvanligt perfekt


--
Mvh René Lønstrup
min web: http://www.rel7star.dk?r=usenet
min email: se om du kan regne dén ud..



Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408524
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste