2009-06-01 66 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); 
    } 
}; 

在這樣的情況下進行,在功能上簽名的任何變化,不會破壞包裝邏輯。