- From: Shadow2531 <shadow2531@gmail.com>
- Date: Sun, 31 Dec 2006 03:54:29 -0500
- To: "Bjoern Hoehrmann" <derhoermi@gmx.net>
- Cc: "Hallvord R. M. Steen" <hallvord@opera.com>, public-webapi@w3.org, "Joao Eiras" <joao.eiras@gmail.com>
On 12/29/06, Bjoern Hoehrmann <derhoermi@gmx.net> wrote:
> * Shadow2531 wrote:
> >[...]
>
> Try this fragment:
>
> <pre id='r'>
</pre>
> <script>
> function trace(s)
> {document.getElementById('r').firstChild.nodeValue+=s+"\n";}
> window.addEventListener('load',function(e){
> trace("win cap ("+e.eventPhase+") ("+e.target+")")}, true);
> document.addEventListener('load',function(e){
> trace("doc cap ("+e.eventPhase+") ("+e.target+")")}, true);
> document.addEventListener('load',function(e){
> trace("doc t+b ("+e.eventPhase+") ("+e.target+")")}, false);
> window.addEventListener('load',function(e){
> trace("win t+b ("+e.eventPhase+") ("+e.target+")")}, false);
> </script>
> <p><img alt='' src='http://www.w3.org/Icons/valid-xhtml10' /></p>
>
> If you simply consider the window to be a parent of the Document, that
> the load event does not bubble, and the load event is dispatched to the
> img element first, then to the document, the correct result would be:
>
> win cap (1) ([object HTMLImageElement])
> doc cap (1) ([object HTMLImageElement])
> win cap (1) ([object HTMLDocument])
> doc t+b (2) ([object HTMLDocument])
O.K. Try the following in Opera if you would.
<pre id='r'>
</pre>
<script>
function trace(s){
document.getElementById('r').firstChild.nodeValue+=s+"\n";
}
/*capture window descendant load events*/
window.addEventListener('load',function(e){
var t=e.target;
if (t==document.body) {
/*In Opera, simulate document as target instead of body*/
t=document;
}
trace("win cap ("+e.eventPhase+") ("+t+")");
},true);
/*capture document descendant load events*/
document.addEventListener('load',function(e){
/*In Opera, simulate document as target instead of body*/
if (e.target!=document.body) {
trace("doc cap ("+e.eventPhase+") ("+e.target+")");
}
},true);
document.addEventListener('load',function(e){
trace("doc t+b ("+e.eventPhase+") ("+e.target+")");
},false);
window.addEventListener('load',function(e){
trace("win t+b ("+e.eventPhase+") ("+e.target+")");
},false);
</script>
<p><img alt='' src='http://www.w3.org/Icons/valid-xhtml10' /></p>
That should produce:
win cap (1) ([object HTMLImageElement])
doc cap (1) ([object HTMLImageElement])
win cap (1) ([object HTMLDocument])
doc t+b (2) ([object HTMLDocument])
win t+b (2) ([object HTMLDocument])
That's everything you expect except for the win t+b (2) at the end.
So, my question is, what's the reason for not wanting win t+b(2) to
fire? Is it because win cap (1) already fires a load for the Document
and you don't want a second one firing?
If so, then I assume if you get rid of the window capturing listener,
then you'd want win t+b(2) to fire as usual?
In other words, it sounds like you're saying,
window.addEventListener("load", func, true) should override
window.addEventListener("load", func, false).
Thanks
--
burnout426
Received on Sunday, 31 December 2006 08:54:40 UTC