【问题标题】:jQuery Custom Label ValidationjQuery 自定义标签验证
【发布时间】:2014-12-24 13:00:51
【问题描述】:

我想在提交时操纵 jQuery Validate 插件标签定位的定位。

当您查看表单时,按提交,您会注意到我拥有的标签正在被验证插件替换。这没关系,但我不想在标签上加倍。

我希望错误消息替换现有的标签文本,以便一个标签处理输入的用途和错误消息。我不确定这是否可能。

这是我目前的验证规则:

validation: function () {
        $('form').validate({
            rules: {
                "email": {
                    required: true,
                    email: true
                },
                    "name": {
                    required: true
                }
            }
        });
    }

这是我所拥有的一个工作示例:JSFIDDLE

【问题讨论】:

  • jQuery Validate 插件创建并切换它自己的错误标签。话虽如此,根据您的问题的措辞,我很难确定您的 jsFiddle 的操作是否有问题,或者您是否只想删除代码中的任何潜在冗余。那么你的 jsFiddle 的哪一部分(如果有的话)不能正常工作?

标签: jquery jquery-plugins jquery-validate


【解决方案1】:

我刚刚调整了你的 Fiddle 添加 CSS

fieldset label:nth-of-type(even)
{
 display:none;
}

点击提交时,第二个标签不显示。

更新评论中的问题:我已经为此做了另一个 CSS 调整,Fiddle

fieldset label[style*='display: none'] + label
{
  display:block;
  color:#007c92;
  top:15px;
  position:absolute;
  left:23px;
  font-size:0.7em;
  font-weight:bold;
 }

我不确定这是否是您想要的 - 姓名和电子邮件现在一直在正确条目的顶部显示标签。如果仅应针对电子邮件执行此操作,则可以对其进行调整。
如果没有这些 CSS 调整,看起来 validate 插件最初只会在输入中显示标签,在出现错误时在标签中显示错误消息,并在输入正确的情况下将标签设置为 display:none。验证插件中可能有一个选项/设置可以在不使用这种解决方法的情况下拥有此功能,但也许您已经检查过了。

【讨论】:

  • 我担心这可能是解决方案。非常感谢这个。您可以解决电子邮件标签的问题吗?当您输入正确的电子邮件时,输入的标签会消失?
  • @Filth 很高兴能为您提供帮助,并且刚刚更新了我对第二期的回答。
【解决方案2】:

不是 100% 确定这是否是您正在寻找的,但是,当您显示 jQuery Validate 标签时,您不需要隐藏您的原始标签。您可以简单地将默认标签的文本替换为 errorPlacement 回调函数中单行中的错误消息文本...

errorPlacement: function (error, element) {
    $(element).next('label').text(error.text());
}

概念证明:http://jsfiddle.net/z2gpjf03/


显然,它需要做更多的工作,但它显示了在按照您的要求使用一组标签的同时可以消除多少代码。

http://jsfiddle.net/89y26/178/

【讨论】:

  • 嘿,非常感谢 - 您的回答引发了一些研究,我修复了我的解决方案。这是解决方案! jsfiddle.net/89y26/236
  • @Filth,我很乐意提供帮助。但是,看看您的演示,我可以说您绝对不应该errorPlacement 函数中的类做任何事情。它仅用于在布局中放置错误。
【解决方案3】:

没错,我做到了!是一项任务,但很高兴能有这样的工作:http://jsfiddle.net/89y26/236/

基本上,它使用highlightunhighlight 函数来检查每个输入是否有效,然后适当地附加有效或错误类和样式。

忽略图标样式,但请随意使用这些家伙并根据自己的喜好进行操作!

validation: function() {
        $('form').validate({
            rules: {
                "name": {
                    required: true
                },
                "email": {
                    required: true,
                    email: true
                }
            },
            //Add Error Class To Fieldset if field invalid
            highlight: function(element) {
                $(element).parent().removeClass('form--valid').addClass('form--error');
                $(element).next('.input-label').hide();
            },
            //Add Valid Class To Fieldset if field valid
            unhighlight: function(element) {
                $(element).parent().removeClass('form--error').addClass('form--valid');
                $(element).next('.error').hide();
                $(element).parent('fieldset').find('.input-label').show();
            },
            errorPlacement: function(error, element){
                error.addClass('input-label--error').insertBefore(element);
                //Add Error class to fieldset
                element.parent('fieldset').addClass('form--error');
            }
      });
   }

【讨论】:

  • 我不能以目前的形式认可这个解决方案。另外,请将相关代码放在答案中,使其独立于 jsFiddle。谢谢。
  • 绝对不应该errorPlacement函数中的样式或类做任何事情。它仅用于在布局中放置错误
  • 我了解 Sparky,但我想需求就是需求,我找不到另一个合适的解决方案。我将使用适当的代码编辑我的答案。
猜你喜欢
  • 1970-01-01
  • 2011-09-18
  • 2013-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多