Нашёл ещё решение. Не слишком шикарное, но зато всегда работает. Основная идея - ручная маршрутизация событий. На черновую это выглядит примерно так. Ясно что нужны ещё доработки чтобы работало в разных браузерах, но пока в FF3.6 и в Konqueror сработало. <html> <head> <style type="text/css"> .reddiv { position: absolute; left: 200px; top: 200px; background-color: red; width: 150px; height: 150px; z-index: 1; } .bdiv { position: absolute; left: 150px; top: 150px; width: 250px; height: 250px; border: 1px dotted orange; z-index: 2; text-align: center; color: white; } .bdiv .holdplace { height: 50%; } </style> <script type="text/javascript"> $ = function(id) { return document.getElementById(id); }; getDivs = function() { return document.getElementsByTagName('div'); }; getAbsoluteTop = function(element) { var top = 0; var node = element; do { top += node.offsetTop; node = node.offsetParent; } while(node); return top; }; getAbsoluteLeft = function(element) { var left = 0; var node = element; do { left += node.offsetLeft; node = node.offsetParent; } while(node); return left; }; getEventTarget = function(e) { return e.target || e.srcElement; }; isIntoDiv = function(x, y, div) { var left = getAbsoluteLeft(div); if( x < left || x > (left + div.offsetWidth) ) { return false; } var top = getAbsoluteTop(div); if( y < top || y > (top + div.offsetHeight) ) { return false; } return true; }; routeClick = function(e, div) { if(div.onclick) { div.onclick.call(div, e); } }; bodyClick = function(e) { if(isIntoDiv(e.pageX, e.pageY, $('baddiv'))) { for( var divs = getDivs(), i = 0, m = divs.length; i < m; ++i ) { var div = divs[i]; if(div.className != 'bdiv') { if(isIntoDiv(e.pageX, e.pageY, div)) { routeClick(e, div); } } } } }; reactLoad = function() { document.body.onclick = bodyClick; }; </script> </head> <body onload="reactLoad();"> <div id="reddiv" class="reddiv" onclick="alert('hello');"> AA </div> <div id="baddiv" class="bdiv"> <div class="holdplace"></div> BB </div> </body> </html> Очевидно, что routeClick должна быть хитрее и заполнять объект event правильными значениями, но это за кадром. Главное - идея в данном случае.