"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.'