'覆盖'javascript函数

时间:2009-06-01 14:17:01

标签: asp.net javascript menu

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

我注意到这些项目被渲染为使用名为Menu_Key的javascript函数

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

我有办法覆盖该功能并让菜单执行我的一个菜单,我可以从中验证我需要的内容然后调用原始函数吗?

5 个答案:

答案 0 :(得分:6)

在最初定义函数后重新定义函数,但在var中跟踪它以便稍后调用它。您将有效地重命名原始的Menu_Key函数。

var originalMenu_Key = Menu_Key;

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

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

答案 1 :(得分:2)

以上解决方案是有效的,但在一般情况下,重新定义可以更灵活的方式完成

var originalMenu_Key = Menu_Key;

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

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

在这种情况下,函数签名的任何更改都不会破坏包装逻辑。

答案 2 :(得分:1)

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

答案 3 :(得分: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);
}

答案 4 :(得分:0)

使用js代码:

    $(document).ready(function () {

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

HTH!