【问题标题】:'overriding' javascript function'覆盖' javascript 函数
【发布时间】:2010-10-30 10:02:54
【问题描述】:

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

我注意到这些项目是使用名为 Menu_Key 的 javascript 函数呈现的

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

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

【问题讨论】:

    标签: asp.net javascript menu


    【解决方案1】:

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

    var originalMenu_Key = Menu_Key;
    
    Menu_Key = function(t) { 
       // do your validations here
    
       if ( /* everything validated */ ) {
         return originalMenu_Key.apply(this,argumets);
       }
    };
    

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

    【讨论】:

      【解决方案2】:

      使用js代码:

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

      hth!

      【讨论】:

      • 只有在你使用 jQuery 时才有效——我没有看到 OP 提到任何地方......
      • 同意 Jason,我省略了“ovveride”这个词 :),正如马里奥在上面指出的那样,这里的重新定义对你来说是正确的答案。
      【解决方案3】:

      您有不止一种方法可以做到这一点。看你想要什么。

      如果您希望某个函数在现有函数之前运行,请添加此函数。

      <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】:

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

        var originalMenu_Key = Menu_Key;
        
        Menu_Key = function(t) { 
           // do your validations here
        
           if ( /* everything validated */ ) {
             originalMenu_Key (t);
           }
        };
        

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-07-21
            • 2014-06-09
            • 2013-04-06
            • 2017-05-29
            • 1970-01-01
            • 2016-06-19
            相关资源
            最近更新 更多