0

假设你有一个函数如下:

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 函数的工作原理——在最后一行之前添加几行,the return valid,这样它就可以验证更多的字段。问题是整个函数都是由核心代码输出的,所以除了错误消息和验证的字段之外,这是我们无法控制的。如果默认情况下无法将某个字段设为必填字段,则它将永远不会为该字段输出此验证码。

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

提前致谢。问候,理查德

4

1 回答 1

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
}
于 2013-03-14T10:49:53.513 回答