用于空格获取"Uncaught TypeError: Cannot call method 'call' of undefined error"的 jQuery 验证正则表达式



这是我的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而不是errorListvalue.idvalue.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到底应该是什么?为什么regexterm里面?

  • 如果term是一个规则,你不能在规则(term)中嵌套规则(regex)。
  • term不是"内置"的rule
  • term也不是你代码中的"自定义"规则。
  • 如果termname字段,则不能在product字段中嵌套term字段。

这解释了你的错误,

"未捕获的TypeError: Cannot call method 'call' of undefined"

换句话说,插件将term视为未定义方法。

假设你的正则表达式是正确的,它应该是这样的…

rules: {
    product: {
        required: true,
        regex: /^s*$/
    }
},

另外,请记住,如果您的自定义方法返回true,则该字段将被验证,如果它返回false,则该字段将验证失败,并将显示错误。

最新更新