我用一种Javascript方法覆盖了一段时间的问题。问题是我在我的一个控件上有onclick事件处理程序,我需要在事件处理程序触发实际方法之前注入一些方法。
假设DGrid.Headerclik被实际分配给onclick事件。
这就是我所做的
DGrid.Headerclik = handleinLocal;
所以每当用户点击网格时,控件就会出现在handleinLocal方法中。在这里,我必须做一些处理,然后调用基础Headerclik()。
function handleinLocal(){
// here i need to call the DGrid.Headerclik() method (base)
}
但是这没有按预期工作。在handleinLocal()中调用DGrid.Headerclik()时,递归调用handleinLocal()方法。但我需要调用基本方法......
有没有办法在JavaScript中实现???
答案 0 :(得分:2)
您应该将前一个处理程序存储在(闭包)变量中:
(function() {
var oldHandler = DGrid.Headerclik;
DGrid.Headerclik = handleInLocal;
function handleInLocal() {
// ...
oldHandler();
// ...
}
})();
答案 1 :(得分:2)
在重新分配自己的处理程序之前,将原始回调保存在变量中。然后,在完成了所需操作后,从变量中调用原始处理程序。
var callback = DGrid.Headerclik;
DGrid.Headerclik = handleinLocal;
function handleinLocal()
{
...your code...
callback(); // invoke original handler
}
答案 2 :(得分:1)
将原始单击事件处理程序复制到变量,然后在新的单击事件处理程序中,调用原始单击处理程序
var oldOnClick = DGrid.Headerclik || function() {};
DGrid.Headerclik = handleinLocal;
function handleinLocal() {
// Do what you need to do
oldOnClick();
}
答案 3 :(得分:0)
谢谢你们(全部)的回复..你的方法很优雅..这成功地调用了基本方法,我忘了告诉你一件事,DGrid是一个单独的函数得到了自己的方法&属性。我在这里又遇到了一个问题..
DGrid.Headerclik()iself使用'this'运算符来访问方法&来自其范围的属性..所以在调用oldHandler()时它在我的本地运行。不完全在DGrid范围内。 (此运算符仅返回不在DGrid中的页面的属性)
为了避免这种情况,我将oldHandler分配回DGrid.Headerclik并直接调用DGrid.Headerclik()..
var oldHandler = DGrid.Headerclik;
DGrid.Headerclik = handleInLocal;
function handleInLocal(sColumnIdx){
FormColumnWidthJSONArray();
//OldHandler(sColumnIdx)
DGrid.Headerclik= OldSCCHandler;
DGrid.Headerclik(sColumnIdx) // To Call the actual Column Click handler in DGrid;
DGrid.Headerclik= HandleLocal;
}