Eventhandling, mehrere Funktionen an ein Event hängen
Christian
- javascript
Hallo,
ich möchte in JavaScript an ein Event mehrere Funktionen dranhängen.
Solange es nur eine Funktion ist, ist es kein Problem:
z.B.:
window.onresize = funktion1;
in C# lassen sich weitere Events durch += dranhängen (allerdings mit Hilfe eines EventHandlers).
Gibt es so etwas auch in JS??
zB: window.onresize += funktion2; (funzt nit, nur beispiel);
einzige Lösung des Problems sehe ich darin das ich eine Funktion schreibe, die alle weiteren aufruft und nur diese eine Funktion ans Event gehangen wird:
function test()
{
funktion1();
funktion2();
}
window.onresize = test;
Damit möchte ich mich allerdings nicht ganz zufrieden geben.
Gibt es noch eine andere Möglichkeit?!
Christian
Hallo,
Gibt es noch eine andere Möglichkeit?!
Die DOM-Methode addEventListener() bietet sich an, wobei das AFAIK nur unter Mozilla-Derivaten (sowie auch im SVG-Kontext) funktioniert.
Testbeispiel (beim resize-Event wird erst der Hintergrund zufaellig gefaerbt und dann erscheint eine alert-Box):
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Test by TM 02/03</title>
<script language="JavaScript" type="text/javascript">
<!--
function Init()
{
if(window.addEventListener)
{
window.addEventListener("resize",newBackColor,false);
window.addEventListener("resize",handleResize,false);
}
else alert("Klappt leider nicht ...");
}
function handleResize()
{
alert("resize-Event fired");
}
function newBackColor()
{
document.getElementsByTagName("body")[0].style.backgroundColor="rgb("+Math.round(Math.random()*255)+","+Math.round(Math.random()*255)+","+Math.round(Math.random()*255)+")";
}
//-->
</script>
</head>
<body onload="Init()">
<p>Klappt unter Mozilla</p>
</body>
</html>
MfG, Thomas
Hi!
Die DOM-Methode addEventListener() bietet sich an, wobei das AFAIK nur unter Mozilla-Derivaten (sowie auch im SVG-Kontext) funktioniert.
Scottandrews hat eine kleine Crossbrowserfunktion geschrieben, die sich addEventListener und attachEvent widmet: http://scottandrew.com/weblog/articles/cbs-events
Möglicherweise beherrschen auch Konqueror und Opera7 addEventListener, aber das hab ich noch nicht probiert.
Gruß Herbalizer
Moin Moin !
Auch nicht schön, und vor allem ungetestet:
var onClickFunctions=new Array();
onClickFunctions.push(new Function('function code'));
onClickFunctions.push(new Function('function code'));
onClickFunctions.push(new Function('function code'));
onClickFunctions.push(new Function('function code'));
onClickFunctions.push(new Function('function code'));
function onClickHandler()
{
var i;
var rv=true;
for (i=0; i<onClickFunctions.length; i=i+1) {
rv=onClickFunctions[i].call(onClickHandler.arguments);
if (!rv) break;
}
return rv;
}
(Ich weiß, das onClickHandler keine benannten Parameter hat. Sie kommen trotzdem in onClickHandler.arguments an. Ist zwar praktisch, aber häßlich! Die Parameterliste ist -- wenn man von der Deklaration und Zuweisung der Parameter-Variablen absieht -- kaum mehr als eine Aufrufempfehlung.)
Alternative:
<head>
<script ...>
var onLoadScript='';
</script>
</head>
<body onload="if (onLoadScript!='') eval(onLoadScript);">
<script ...>
onLoadScript=onLoadScript+'alert("Hallo Welt");';
</script>
...
<script ...>
onLoadScript=onLoadScript+'alert("Bin da, wer noch?");';
</script>
</body>
Das setze ich momentan in einer komplexen, CGI-basierten Anwendung ein, die HTML aus Templates und Funktionsergebnissen zusammenstückelt.
Alexander