如何围绕输入验证和包装错误消息?

时间:2015-04-24 20:53:57

标签: javascript jquery input jquery-validate

我在输入中使用了很棒的jQuery验证插件:

<input type="text" name="name" value="" />

我想添加这个结构(在我的输入周围添加一个div.error并在div中显示我的错误标签),如下所示:

<div class="error">
   <label id="name-error" class="error" for="name">This field is required.</label>
   <input type="text" name="name" value="" />
</div>

我尝试使用errorPlacement功能,但我无法实现。

2 个答案:

答案 0 :(得分:3)

jQuery Validate插件会自动创建并切换错误消息元素。

  1. 您可以使用the errorElement option指定元素的类型,例如divlabel等。默认值为label

  2. 您可以使用the errorPlacement option中的各种jQuery方法指定此错误消息元素的位置,例如在父级内部之前,之后,之后等。默认值是“input元素之后”。

  3. 但是,您无法轻松地将错误消息元素包装在input元素周围。虽然可以使用jQuery在errorPlacement选项中执行此操作,但在需要清除错误时会出现问题。当需要清除邮件时,插件会自动删除/隐藏错误消息元素,并且input元素将随之删除/隐藏。

    解决方案是自己创建外部div并使用highlightunhighlight选项在此外部div上切换错误类。您必须记住还要在highlightunhighlight中包含默认代码,否则默认行为将被破坏。由于您所需的类是默认错误类,因此您只需使用errorClasshighlight选项中的unhighlight参数。

    您的HTML

    <div>
       <input type="text" name="name" value="" />
    </div>
    

    您的.validate()方法

    $('#yourForm').validate({
        // rules and options,
        errorPlacement: function(error, element) {
            error.insertBefore(element);
        },
        highlight: function(element, errorClass, validClass) {
            $(element).addClass(errorClass).removeClass(validClass); // <- default behavior
            $(element).parent('div').addClass(errorClass); // <- add error class to your parent div
        },
        unhighlight: function(element, errorClass, validClass) {
            $(element).removeClass(errorClass).addClass(validClass); // <- default behavior
            $(element).parent('div').removeClass(errorClass); // <- remove error class from your parent div
        }
    });
    

    验证错误期间DOM的最终结果

    <div class="error">
       <label id="name-error" class="error" for="name">This field is required.</label>
       <input type="text" name="name" value="" />
    </div>
    

答案 1 :(得分:1)

您应该使用highlight处理程序,它允许您定义将输入标记为无效的方法:

jQuery.validator.setDefaults({
    highlight: function(element, error, valid){
        $(element).parent("div").addClass(error); 
        // or do whatever you want
    }
});

请注意,还有另一个名为unhighlight的处理程序,它也应该实现,但与第一个处理程序相反。这里有一个例子:

unhighlight: function(element, error, valid){
    $(element).parent("div").removeClass(error); 
    // or do whatever you want but in opposite way
}

问题的完整解决方案应如下所示:

jQuery.validator.setDefaults({
    highlight: function(element, error, valid){
        $(element).parent("div").addClass(error); 
    },
    unhighlight: function(element, error, valid){
        $(element).parent("div").removeClass(error); 
    }
});

请注意,上面的代码应该包含在网站上,最好是在你的jquery.validation.js之后,因为它改变了jQuery.validator的默认行为。通过jQuery.validator.setDefaults执行此操作的优势在于,您的配置将应用于您网站上的每个表单,