2009-06-01 68 views
2

我需要在用户通过ASP.NET菜单导航之前添加一些验证。'重写'javascript函数

我注意到,项目呈现使用名为Menu_Key

<td id="ctl00_MainMenun1" onmouseover="Menu_HoverStatic(this)" onmouseout="Menu_Unhover(this)" onkeyup="Menu_Key(this)"> 

javascript函数我有没有办法重写功能,并具有菜单执行我的一个,从中我可以验证我需要什么然后打电话给原件?

回答

6

在函数初始定义后重定义函数,但在函数中记录它,以便稍后调用它。您将有效地重命名原始的Menu_Key功能。

var originalMenu_Key = Menu_Key; 

Menu_Key = function(t) { 
    // do your validations here 

    if (/* everything validated */) { 
    originalMenu_Key (t); 
    } 
}; 
1

只需重新定义页面底部的函数(技术上在初始声明之后)。

0

您有多种方法可以做到这一点。取决于你想要的。

如果你想让一个函数在现有的函数之前运行,那就添加它。

<td id="ctl00_MainMenun1" onmouseover="Menu_HoverStatic(this)" 
onmouseout="Menu_Unhover(this)" onkeyup="my_Function(); Menu_Key(this);"> 

如果要有条件地运行第二个功能则添加此

<td id="ctl00_MainMenun1" onmouseover="Menu_HoverStatic(this)" 
onmouseout="Menu_Unhover(this)" onkeyup="my_Function(this);"> 


function my_Function(sender) 
{ 
    if(valid) 
    Menu_Key(sender); 
} 
0

使用js代码:

$(document).ready(function() { 

    $("td").mouseover(function(){ 
      alert('MouseOver validation content goes here.'); 
     }).mouseout(function(){ 
      alert('MouseOut validation content goes here.'); 
}); 

心连心!

+0

这只有在你使用jQuery时才有效 - 我没有看到OP在任何地方提及... – 2009-06-01 14:47:06

2

上述方案是有效的,但在通常情况下重新定义可以在一个更加灵活的方式

var originalMenu_Key = Menu_Key; 

Menu_Key = function(t) { 
    // do your validations here 

    if (/* everything validated */) { 
    return originalMenu_Key.apply(this,argumets); 
    } 
}; 

在这样的情况下进行,在功能上签名的任何变化,不会破坏包装逻辑。