2013-03-14 75 views
0

的定義,假設你有一個函數如下:更改JavaScript函數

function chk() { 
    var valid = true; 
    if(document.getElementById("bob")) { 
     if(document.getElementById("bob").value == "") { 
      valid = false; 
      writeErrorMessage("bob", "Field 'Bob' is mandatory"); 
     } 
    } 
    ... //There may be a lot more than just this field, depending on the clients configuration. 
    return valid; 
} 

此功能是通過核心代碼輸出。現在客戶來了,並說他們希望域'x'是強制性的。通過核心代碼看,我們可以看到,這個字段不能進行默認強制性的,但是我們以前做的是類似以下內容:

var chk2 = chk; 
chk = function() { 
    var valid = true; 
    if(document.getElementById("x")) { 
     if(document.getElementById("x").value == "") { 
      valid = false; 
      writeErrorMessage("x", "Field 'x' is mandatory"); 
     } 
    } 
    if(valid) valid = chk2(); 
    return valid; 
} 

這裏的問題是,如果有效的是假的,然後它贏得不會運行原始的chk函數(chk2),所以最初驗證的那些字段的錯誤消息將不會顯示。

我想要做的是基本上編輯此chk函數的工作 - 在最後一行之前添加幾行,即return valid,以便驗證更多字段。問題是這個整個函數是由核心代碼輸出的,所以除了錯誤消息和哪些字段被驗證之外,這是我們無法控制的。如果一個字段默認情況下不能強制執行,那麼它將永遠不會輸出該字段的驗證碼。

記住return valid行保證始終在那裏,有沒有人知道我可以採取一個函數的主體,取代它的一個特定部分,然後將新字符串設置爲新的主體功能?這似乎是應該可以與JS的東西,但我不能把我的手指,以實現這一目標。

在此先感謝。 問候, 理查德

+0

我只是想一個可能的解決方法的 - CHK2的'結果存儲()'另一個變量,'valid2',然後'return(valid && valid2);'。我會試試這個。有些時候,我們可能希望編輯*字段驗證的方式 - 例如檢查格式。不是100%確定,如果這是可能的,我們目前這樣做的方式。 – ClarkeyBoy 2013-03-14 09:45:54

回答

0

已經重新閱讀你原來的問題這個怎麼樣:

//store the original 
var old_chk=chk; 

// create a new version that first runs the original 
chk=function(){ 
    // run the original validation 
    var valid=old_chk();  

    //do your additional tests here 
    var el=document.getElementById('x'); 
    if(el &&!el.value){ 
     valid=false; 
     ... 
    }  
return valid 
} 
+0

OP說:「問題是,這個整個函數是由核心代碼輸出的,所以除了錯誤消息和哪些字段被驗證之外,這是我們無法控制的。」 – 2013-03-14 10:57:33

+0

在這種情況下,存儲原始的'var oldcheck = check '然後用id參數和'if(!id){return oldcheck()}來聲明新的一個' – kevmc 2013-03-14 11:13:12

+0

重讀你的問題(經過一夜的睡眠)我已經編輯了我的答案 – kevmc 2013-03-14 18:01:32