浇灌的园子

要像一棵树栽在溪水边,按时候结果子,叶子也不枯干。

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

发现问题:

  1. 在复杂事件处理过程中,很可能会丢失event事件对象,特别是IE和FireFox两大浏览器,这个时候要捕获事件源就非常困难……
  2. 如果在事件处理过程中,需要不断地传递event事件对象作为参数,这是一个非常痛苦的事情……

 

解决问题:

  1. 使用caller函数可以获取事件堆栈,通过简单分析来获取事件源对象,彻底解决事件源获取问题。
  2. 同时也解决所有浏览器兼容问题。亲测如下语句支持绝大部分浏览器(Chrome/FireFox/IE/Safari/Opera)

 

Javascript源代码:

//获取事件源的ID
function getTarget() {
    var evt = getEvent();
    var eventFrom = evt.target || evt.srcElement;
    if(eventFrom.nodeName == "OPTION") {
        eventFrom = eventFrom.parentElement;
    }
    return eventFrom.id;
}

//获取事件源
function getEvent() {
if (typeof(event) != "undefined" || window.event) return event || window.event;
func = getEvent.caller;
while (func != null) {
var arg0 = func.arguments[0];
if (arg0) { if ((arg0.constructor == Event || arg0.constructor == MouseEvent) || (typeof (arg0) == "object" && arg0.preventDefault && arg0.stopPropagation)) { return arg0; } }
func = func.caller;
}
return null;
}
posted on 2013-09-24 16:00  浇灌的园子  阅读(1359)  评论(0编辑  收藏  举报