快速业务通道

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 在内,使用事件执行回调的实现。如果你正编写基于事件代理的回调系统,我想你会对这一技术感兴趣的。

更新2

Prototype 在针对 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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号