这是我的jquery代码,按照以前的stackoverflow问题
$('#productId').validate({
rules: {
product: {
required: true,
term: {regex: /^$|s/}
}
},
messages: {
product: {
required: "A text is much",
term: "Please avoid spaces"
},
},
showErrors: function (errorMap, errorList) {
$.each(this.successList, function (index, value) {
$('#'+value.id+'').popover('destroy');
});
$.each(errorList, function (index, value) {
$('#'+value.element.id+'').attr('data-content',value.message, 'title', 'Oops!').popover({
placement: 'top',
trigger: 'manual',
delay: { show: 500, hide: 5000 }
}).popover('show');
});
}
});
我要做的是显示一个弹出窗口,如果有空格在术语输入。但每次它都会给我错误
Uncaught TypeError: Cannot call method 'call' of undefined
我知道正则表达式部分有问题。因为我尝试了相同的代码与minLength,它工作得很好。我做错了什么?
p。我正在使用twitter引导弹出窗口。
更新:关于错误的更多信息
Uncaught TypeError: Cannot call method 'call' of undefined ----------jquery.validate.js:504
$.extend.check ---------- jquery.validate.js:504
$.extend.element ---------- jquery.validate.js:357
$.extend.defaults.onfocusout ---------- jquery.validate.js:231
delegate ---------- jquery.validate.js:317
(anonymous function) ---------- jquery.validate.js:1184
jQuery.event.dispatch ---------- jquery.js:3075
elemData.handle ---------- jquery.js:2751
jQuery.event.trigger ---------- jquery.js:2987
jQuery.event.simulate ---------- jquery.js:3302
handler
我的猜测是,您应该在第二个$.each
中使用this.errorList
而不是errorList
。value.id
和value.element.id
的两个循环之间的差异也可能是显著的。
rules
声明的结构如下…
rules: { // <- rules:
field_name: { // <- name attribute of field
rule_name: parameter, // <- rule: parameter
required: true, // example 1
min: 30 // example 2
}
},
现在你的代码:
rules: {
product: {
required: true,
term: {regex: /^s*$/}
}
},
term
到底应该是什么?为什么regex
在term
里面?
- 如果
term
是一个规则,你不能在规则(term
)中嵌套规则(regex
)。 -
term
不是"内置"的rule
。 -
term
也不是你代码中的"自定义"规则。 - 如果
term
是name
字段,则不能在product
字段中嵌套term
字段。
这解释了你的错误,
"未捕获的TypeError: Cannot call method 'call' of undefined"
换句话说,插件将term
视为未定义方法。
假设你的正则表达式是正确的,它应该是这样的…
rules: {
product: {
required: true,
regex: /^s*$/
}
},
另外,请记住,如果您的自定义方法返回true
,则该字段将被验证,如果它返回false
,则该字段将验证失败,并将显示错误。