So, ich habs.
Es muß auf der inneren Ebene ein zusätzlicher event-handler eingerichtet werden. Dort kann über CancelBubble=true das weiterreichen zur nächsthöheren Ebene unterbunden werden, oder weitere Operationen durchgeführt werden.
Für alle dies interessiert hier ein kleines Testprogramm:
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>stop bubbling</title>
<script language="JavaScript">
function onclickA(e)
{
if (!e) var e = window.event //MSIE
alert("Click innen");
e.cancelBubble=true;
e.stopPropagation();
return true;
}
function onclickB(e)
{
alert("Click aussen");
return true;
}
function onloadH()
{
ela = document.getElementById("a")
elb = document.getElementById("b")
if (ela.addEventListener) {
ela.addEventListener("click", onclickA, false);
elb.addEventListener("click", onclickB, false);
}
else if (ela.attachEvent){
ela.attachEvent("onclick", onclickA);
elb.attachEvent("onclick", onclickB);
}
return true;
}
</script>
</head>
<body onload="onloadH()">
<div id="b" style="width:200px; height:200px; background:red">
<div id="a" style="width:100px; height:100px; background:blue"></div>
</div>
</body>
</html>
Noch ein paar Anmerkungen dazu.
Es muß unterschieden werden zwischen MSIE und dem Rest der Welt.
Bei MS heisst wird das event nicht über "e", sondern über "window.event" referenziert.
Deshalb die erste Zeile in den Funktionen, die das event abarbeiten sollen.
Weiterhin heisst es bei MS "attachEvent" statt "addEventListener".
Bei letzterem gibt es einen zusätzlichen dritten Parameter, mit dem bestimmt werden kann, ob Ereignisse von aussen oder von innen abgearbeitet werden soll.
Der hier vorgestellten Intention nach soll es von innen nach aussen gehen. Deshalb der dritte Parameter auf "false".
Bei Microsoft hingegen geht es immer von innen nach aussen.
Dirk