-1

这是我的 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 尝试了相同的代码并且效果很好。我究竟做错了什么?

PS我正在使用twitter bootstrap进行popover。

更新:有关错误的更多信息

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
4

2 回答 2

1

我的猜测是你应该使用this.errorList而不是仅仅errorList在第二个$.each. value.id和中的两个循环之间的差异也可能value.element.id很重要。

于 2013-04-18T15:44:47.063 回答
1

声明的结构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是规则,则不能将规则 ( regex) 嵌套在规则 ( term) 中。
  • termrule 根据文档,它不是“内置” 。
  • term根据您的代码,也不是“自定义”规则。
  • 如果term是字段name,则不能将字段 () 嵌套在字段 ( term) 内product

这解释了你的错误,

“未捕获的类型错误:无法调用未定义的方法‘调用’”

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

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

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

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

于 2013-04-20T15:32:37.530 回答