//作者: laruence<xinchen.hui at alibab-inc.com>
//http://blog.csdn.net/laruence/
//转载请注明出处
我们知道在Javascript中,可以使用事件处理函数来监听事件,在事件处理函数中,我们可以通过当前的事件对象(IE: window.event ; firefox parameter event)来获取到事件发生的对象。
比如,在IE中
那么,JS内部是如何通过event获取到srcTarget呢? 一直以来,我以为srcTarget会保留一个到事件发生对象的引用,但今天遇到的一个问题,让我改变了看法:
一个Div,上面有个blur时间,当失去焦点的时候就会display=none, Div中包含几个<a>标签,在这些标签上监听了click事件。
问题出现了,因为当你click一个A的时候,blur时间被触发了,那么这个DIV就display none了,紧接着click事件被触发,问题就是,这个时候,在click函数中,取不到正确的srcTarget了。
经过一番折腾,最后使用了个比较hacker的方法来解决,就是在blur事件函数中,这样:
回头来想,我猜测,Javascript中的srcElement的获取机制如下:
事件发生时,event对象记录事件的鼠标坐标,但并不记录发生事件对象的引用,只有当你去获取srcTarget的时候,JS解释器,会根据event的鼠标坐标去获取该坐标的元素。
当然,这只是个简单猜想,还没有去仔细验证,唉,不开源的东西搞起来就是麻烦,还要猜啊猜的。
如果谁知道具体机理,欢迎来信指教。
//http://blog.csdn.net/laruence/
//转载请注明出处
我们知道在Javascript中,可以使用事件处理函数来监听事件,在事件处理函数中,我们可以通过当前的事件对象(IE: window.event ; firefox parameter event)来获取到事件发生的对象。
比如,在IE中
function eventHandler = function(e){ var ev = e || window.event ; //window.event for IE, para e for ff var el = evt.srcTarget || evt.srcElement; // compatible with IE //then el is the target which cause the event }
那么,JS内部是如何通过event获取到srcTarget呢? 一直以来,我以为srcTarget会保留一个到事件发生对象的引用,但今天遇到的一个问题,让我改变了看法:
一个Div,上面有个blur时间,当失去焦点的时候就会display=none, Div中包含几个<a>标签,在这些标签上监听了click事件。
问题出现了,因为当你click一个A的时候,blur时间被触发了,那么这个DIV就display none了,紧接着click事件被触发,问题就是,这个时候,在click函数中,取不到正确的srcTarget了。
经过一番折腾,最后使用了个比较hacker的方法来解决,就是在blur事件函数中,这样:
setTimeout(function(){div.style.display='none';}, 100);
回头来想,我猜测,Javascript中的srcElement的获取机制如下:
事件发生时,event对象记录事件的鼠标坐标,但并不记录发生事件对象的引用,只有当你去获取srcTarget的时候,JS解释器,会根据event的鼠标坐标去获取该坐标的元素。
当然,这只是个简单猜想,还没有去仔细验证,唉,不开源的东西搞起来就是麻烦,还要猜啊猜的。
如果谁知道具体机理,欢迎来信指教。