jQuery验证简化

时间:2015-09-18 16:25:25

标签: jquery jquery-validate

我想使用错误消息,但不必为每个表单写出消息,本网站上有超过20个。表格都有这种结构:

   <li>
        <label for="firstName">First Name*</label>
        <input name="firstName" id="firstName" type="text">
    </li>

    <li>
        <label for="lastName">Last Name*</label>
        <input name="lastName" id="lastName" type="text">
    </li>

我有以下验证规则:

$.validator.messages.required = function (param, input) {
    msg = $("input").prev("label").eq(0).text();
    return 'Please fill out the ' + msg + ' required field.';
 }

这将为每个错误插入第一个错误字段标签中的文本。在此之前,它创建了一个字符串,其中包含每个错误字段的标签,用于每个错误“请填写名字,姓氏,(等)必填字段。”

如何获取每个错误类的上一个标签并使用该文本?我不能让.each()在这里工作。感谢。

这是fiddle

2 个答案:

答案 0 :(得分:1)

将选择器从$("input")更改为$(input)。前者是所有<input>元素的选择器...后者是使用input函数参数的选择器,该参数表示正在验证的当前元素。

msg = $(input).prev("label").text();

DEMO:http://jsfiddle.net/n2cL6u7j/1/

注意:删除click处理程序并将其替换为DOM ready事件处理程序。 .validate()方法仅用于初始化插件,因此只需在DOM就绪时调用一次。否则,当表单加载到页面上时,它将被称为一次。在你的jsFiddle中,每次点击表单本身的提交按钮时,你都会调用.validate(),这是没有意义的。

原始答案: (有一些问题)

只需使用errorPlacement选项操作required规则的消息,如下所示......

errorPlacement: function (error, element) {
    if (error.text() === "required") { // <- only when the 'required' rule is used
        lbl = $(element).prev('label').text();
        error.text('Please fill out the ' + lbl + ' required field.');
    }
    error.insertAfter(element); // <- default placement
},

因为我的条件是查看&#34; required&#34;在required规则的消息中,我全局更改了该消息。这只是为了简化我的条件,你可以完全跳过它。

$.validator.messages.required = function (param, input) {
    return 'required';
}

DEMO:http://jsfiddle.net/jhdo83f8/

答案 1 :(得分:-1)

试试这个:

$("input").each(function(i,op)
{
   alert($(this).prev("label").text());      
});