在jquery验证插件中添加自己的规则

时间:2014-03-18 13:29:59

标签: javascript jquery html validation

我有下一个jquery代码:

$("input").rules("add", {
    required: true,
    messages: {
        required: 'Please enter your telephone number'
    },
    errorPlacement: function(error, element) {
        console.log('bob');
        element.insertBefore(error);
    }
});

我正在尝试添加新规则,例如在此问题中回答:jquery validation & id's ft numbers

我有这样的HTML代码:

<form method='post' action='' id='#countersForm'>
<input id="88" class="counter_input active" type="text" enabled="">
<input id="89" class="counter_input active" type="text" enabled="">
</form>

我的问题是:

1)为什么浏览器会尝试验证加载页面上的字段?我不需要这个(消息bob在页面加载时出现。

2)为什么只有第一个输入字段在验证?我想验证所有字段。

3)为什么控制台说,该元素没有定义?

documentation表示元素参数包含经过验证的元素。 console.log(element)说这是未定的。为什么呢?

2 个答案:

答案 0 :(得分:1)

来自documentation

  

读取,添加和删除元素的规则。

它说&#39;&#39;元件。在您的情况下,$('input')返回两个元素。

验证插件使用元素的name属性,您的元素没有名称。

您必须使用validate()方法在要验证的form上初始化插件,例如

$("#myform").validate({ //where my form is the id of your form
 rules: {
  name: "required", //name is the name of your element
 },
 messages: {
 }
});

答案 1 :(得分:1)

感谢您的回答和评论。

我解决了我的问题。工作代码(当前问题已解决)在这里:http://jsfiddle.net/2LRv7/2/

我的js代码中有一个很大的错误。我将errorPlacement部分放到规则函数中。我必须将此选项添加到.validate部分。

$("#countersForm").validate({
    errorPlacement: function (error, element) {
        console.log(error);
        var br = $( "<br>" );
        error.insertAfter(element);
        br.insertAfter(element);
    }
});

另外,正如@TilwinJoy所说,我使用$('input').rules(/*....*/)错了。我不得不使用each函数。

此代码没问题:

$("input").each(function () { // next code will affect all input fields
    $(this).rules("add", { // $(this) is my input field
    required: true,
        digits: true,
        messages: {
            required: 'Это поле обязательно для заполнения',
            digits: 'В поле могут быть только цифры'
        }
    });
});

目前的问题已经解决,但我有另一个问题。如果您想帮助查看此问题:Class is not being added to the error element on first check , but when field is being checked again all going ok (jquery validation plugin)