更改JavaScript函数的定义

时间:2013-03-14 09:39:31

标签: 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;
}

这里的问题是,如果valid为false,那么它将不会运行原始chk函数(chk2),因此最初验证的那些字段的错误消息将不会显示。

我想要做的基本上是编辑这个chk函数的工作方式 - 在最后一行return valid之前添加几行,以便验证更多字段。问题是整个函数是由核心代码输出的,因此,除了错误消息和验证的字段之外,这是我们无法控制的。如果默认情况下无法强制某个字段,那么它将永远不会为该字段输出此验证代码。

请记住,return valid行始终存在,有没有人知道我可以采用函数体的方法,替换它的特定部分然后将新字符串设置为新的那个功能的身体?这似乎是JS应该可行的事情,但我无法指出实现这一目标的方法。

提前致谢。 问候, 理查德

1 个答案:

答案 0 :(得分: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
}