为什么 jQuery 验证方法在 Chrome 中有效,但在 IE 中无效?

why does jQuery validate method work in Chrome but not IE?

我得到的可能是一件非常简单的事情,但正如您想象的那样,我没有从 IE Developer 调试器获得任何帮助! :)

我添加了这个方法,根据 select 菜单选择使字段长度有条件。

$.validator.addMethod("netwkdigit", function(value, element) {
var loannumentered = LOAN_NUM.value; 
if(acctloc.value != "Network" && loannumentered.length > 10 )  {
return false;  
}
 else {
 return this.optional(element) || value == value.match(/^[0-9 ]+$/);;    
}
},    "Only 10 numbers allowed for the loan if network is not chosen.");

这在 Chrome 中完全符合我的预期,但在 IE 中却不行。其余 jQuery 验证条件如图所示。

            rules: {
            acctloc: {
                required: true
            },...
LOAN_NUM: {
required: true,
number: true,
netwkdigit: true,
minlength: 10, 
maxlength: 13,
},

然后还有其他 jQuery 验证规则,但它们与此无关。参考上述内容,如果 select 选择不是网络,我希望它最多只有 10 位数字,否则为 13。

现在,在该方法中,我并没有在那里引用表单名称本身,但我已经在表单的主要 jQuery 验证函数中引用了它。 我认为这无关紧要,但我不确定。

如有任何反馈,我们将不胜感激。

我在上面添加了一个小片段来显示 acctloc 引用。

This works perfectly as I expect it to in Chrome, but not IE

正如所写,它不应该在任何浏览器中工作。

您的代码...

LOAN_NUM: {
    required: true,
    number: true,
    netwkdigit: true,
    minlength: 10, 
    maxlength: 13,
},

我不知道你从哪里得到 acctloc 变量;你无法从这里访问 LOAN_NUM...

$.validator.addMethod("netwkdigit", function(value, element) {
    var loannumentered = LOAN_NUM.value;  // <- here!
    if (acctloc.value != "Network" && loannumentered.length > 10 ) {
    ....

LOAN_NUM 仅表示 .validate() 方法的 rules 对象中正在评估的字段的 name 属性。它不是可以在其他任何地方使用的全局变量。

但是,由于 LOAN_NUM.value 似乎表明您想要此字段的 "value",只需使用 addMethod() 方法已经提供的 value 参数即可。 ..

$.validator.addMethod("netwkdigit", function(value, element) {
    var loannumentered = value; // value = the value of the field
    ....

或者,如果您想从 .addMethod() 中访问其他字段的值,请使用 jQuery:

$('[name="acctloc"]').val();  // value of 'acctloc'
$('[name="LOAN_NUM"]').val()  // value of 'LOAN_NUM'