【问题标题】:How to validate and wrap error message around input?如何验证和包装输入周围的错误消息?
【发布时间】:2015-04-24 20:53:56
【问题描述】:

我在输入中使用了出色的 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 功能,但我做不到。

【问题讨论】:

  • 请更具体地说明您需要帮助的内容。
  • 您需要展示其余的相关代码、您对.validate() 方法的jQuery 调用等

标签: javascript jquery input jquery-validate


【解决方案1】:

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

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

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

但是,您不能轻易地将错误消息元素包裹在 input 元素周围。虽然可以使用 jQuery 在 errorPlacement 选项中执行此操作,但当需要清除错误时会出现问题。当需要清除消息时,插件会自动删除/隐藏错误消息元素,并且您的 input 元素将与它一起被删除/隐藏。

解决方案是自己创建外部div,并使用highlightunhighlight 选项来切换外部div 上的错误类。您还必须记住在highlightunhighlight 中包含默认代码,否则默认行为将被破坏。由于您想要的类是默认错误类,您可以简单地在 highlightunhighlight 选项中使用 errorClass 参数。

您的 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>

【讨论】:

  • 非常感谢您的回答,非常有帮助 ;-) 周末愉快
【解决方案2】:

您应该使用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 这样做的好处是您的配置将应用于您网站上的每个表单,

【讨论】:

  • thnx,你的答案非常适合我们不直接调用 .validate 并且仅依赖默认值的 asp.net mvc
猜你喜欢
  • 2015-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-04
  • 1970-01-01
  • 2018-07-01
  • 1970-01-01
  • 2013-08-29
相关资源
最近更新 更多