jQuery验证器添加方法未定义

时间:2016-05-08 19:08:21

标签: javascript jquery jquery-validate

https://jsfiddle.net/c50m4pos/1/

简单的验证器可以工作,但是一旦我添加了一些像上面那样的东西,事情开始变得奇怪了。



$(document).ready(function($) {



  $('#testform').validate({
    rules: {
      testinput: {
        required: true,
        textonly: true,
        messages: {
          required: 'Input is required'
        }
      }
    }

  });

  $.validator.addMethod(
    "textonly",
    function(value, element) {
      var valid = false;
      var check = /[^-'\.a-zA-Z0-9\s\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02AE]/.test(value);
      if (check == false)
        valid = true;
      return this.optional(element) || valid;
    },
    "Please only enter letters, digits, spaces, periods, or hyphens."
  );

});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.15.0/jquery.validate.min.js"></script>

<form id="testform">
  <p>
    <label>testinput 1</label>
    <label for="testinput" class="error" id="testinput-error"></label>
    <input id="testinput" name="testinput">
  </p>

  <button type='submit'>
    Submit
  </button>


</form>
&#13;
&#13;
&#13;

Safari返回错误

  

[错误] TypeError:undefined不是对象(评估&#39; a.validator.methods [d] .call&#39;)。检查元素testinput时发生异常,检查&#39;消息&#39;方法。

Firefox说

  

TypeError:a.validator.methods [d]未定义... f){e = {method:d,参数:f [d]};尝试{if(c = a.validator.methods [d] .CALL(此,I,

新方法&#34; textonly&#34;工作,它优雅地显示错误消息。但是,当重新验证输入字段(您重新输入没有非法字符的文本)时,会发生错误。

我已尝试添加&#34; textonly&#34; textinput规则下的自定义消息,但仍然是错误。 我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

messages对象是rules的兄弟...它不属于rules内部。

$('#testform').validate({
    rules: {
        testinput: {
            required: true,
            textonly: true,
        }
    },
    messages: {  // sibling of 'rules' object
        testinput: {
            required: 'Input is required',
            textonly: 'letters only'  // over-ride '.addMethod()' message
        }
    }
});

DEMO https://jsfiddle.net/c50m4pos/2/

请参阅documentation for messages以了解正确用法。