Javascript框架的自定义事件
作者 佚名技术
来源 网页制作
浏览
发布时间 2012-03-07
}
});
dispatchFakeEvent = function(handler) {
// 触发 propertychange 事件
document.documentElement.fakeEvents++;
};
}
简而言之,殊途同归,只是针对 Internet Explorer 使用了 propertychange 事件作为触发器。 更新有些用户留言建议使用 setTimeout: try { callback(); } catch(e){ setTimeout(function(){ throw e; }, 0); } 而下面是我的考虑 如没特别的要求,其实定时器的确也能搞定这问题。 上面仅仅是举例说明了这一技术的可行性。 意义在于,目前很多框架在回调系统的实现都非常的 脆弱,这或许能给这些框架能它们提供更优化的思路。 而定时器的实现并非实际的触发了事件,在实际事件 中,事件会被顺序的执行、可相互影响(譬如冒泡)、 还可以停止 -- 而这些是定时器无法做到的。 总之,最重要的是已经实现了包括 Internet Explorer 在内,使用事件执行回调的实现。如果你正编写基于事件代理的回调系统,我想你会对这一技术感兴趣的。 更新2Prototype 在针对 Internet Explorer 的自定义事件处理上,也是同上述的方法触发回调: http://andrewdupont.net/2009/03/24/link-dean-edwards/ 译注,Prototype 1.6 对应的代码,摘记如下: function createWrapper(element, eventName, handler) { var id = getEventID(element); // 获取绑定事件的 ID var c = getWrappersForEventName(id, eventName); // 获取对应的事件的所有回调 if (c.pluck("handler").include(handler)) return false; // 避免重复绑定 // 新建回调 var wrapper = function(event) { if (!Event || !Event.extend || (event.eventName && event.eventName != eventName)) return false; Event.extend(event); handler.call(element, event); }; // 加入到回调数组 wrapper.handler = handler; c.push(wrapper); return wrapper; } function observe(element, eventName, handler) { element = $(element); // 对应事件的元素 var name = getDOMEventName(eventName); // 事件执行方式 var wrapper = createWrapper(element, eventName, handler); // 封装回调 if (!wrapper) return element; // 绑定事件 if (element.addEventListener) { elemen |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于Javascript框架的自定义事件的所有评论