假设您有如下功能:
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应该可行的事情,但我无法指出实现这一目标的方法。
提前致谢。 问候, 理查德
答案 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
}