如何覆盖/扩展javascript处理程序?

时间:2011-11-28 09:04:01

标签: jquery asp.net

我有几个.js文件,都附加到某个页面。我正在添加到母版页的基础版负责在有Ajax女士活动时显示ajax加载器动画。以下是执行此操作的代码部分:

$(document).ready(function () {
   if (isSysDefined()) {
       var prm = Sys.WebForms.PageRequestManager.getInstance();
       if (prm) {
           prm.add_beginRequest(BeginRequestHandler);
           prm.add_endRequest(EndRequestHandler);
       }
   }
});

function BeginRequestHandler(sender, args) {
   $('#ajax-loader').show();
}

function EndRequestHandler(sender, args) {
   $('#ajax-loader').hide();
}

现在,我想在另一个文件中扩展BeginRequestHandler和EndRequestHandler。如果我只是重复上面的代码,但处理程序的实现不同,显然其中一个不会触发。

如何执行这两个处理程序?在“基础”处理程序结束时,我可以触发一些新事件,然后我可以在稍后阶段将它绑定到它,但实际上 - 这是唯一的方法吗?因为它似乎是hackish(以一种糟糕的方式)......

1 个答案:

答案 0 :(得分:0)

是的,虽然仍然有点“hackish”,但是你需要存储对前一个函数的引用,然后在新函数中执行这个引用。

在您的外部文件中,有这样的代码:

var prevBeginRequestHandler = 0;
if (typeof BeginRequestHandler == "function")
    prevBeginRequestHandler = BeginRequestHandler;

window.BeginRequestHandler = function() {
    if (prevBeginRequestHandlero)
        prevBeginRequestHandler();
    alert("I am another function");
};

第二个功能也一样。

Live test case

只需一件事 - 确保在第一次声明函数后包含该文件。