【问题标题】:jQuery Validation plugin - check if field is valid (but not show the validation message)jQuery 验证插件 - 检查字段是否有效(但不显示验证消息)
【发布时间】:2012-09-18 15:53:45
【问题描述】:

我正在使用 jQuery 验证插件,并定义了一个表单验证功能,如下所示。基于一些用户操作,我正在运行一个自定义 JS 函数,在该函数中我只想检查电子邮件和电话字段是否有效。 但是我不想验证它们,即我不想显示验证错误,我只需要检查它们的值是否有效。

类似

$('#email').isvalid();

我已经检查了 Validator 的 element 方法,但它验证了元素,而不仅仅是检查它的值是否有效。所以换句话说,我正在寻找一种以编程方式运行规则的方法。任何帮助表示赞赏!

下面的表单验证器功能:

var validator = $("#olForm").validate({
    rules: {
        "email": {
             required: true,
             email: true
        },
        "phone": {
             required: true,
             digits: true,
             minlength: 9,
             maxlength: 11
        }
    }
});

【问题讨论】:

  • 引用 “我不想验证它们,即只检查它们的值是否有效。” ~嗯,那是验证...检查该字段是否有效。请详细说明您想要什么...说“我不想验证但我想检查有效性”是荒谬的。
  • @Sparky672 他不想显示验证结果(例如错误消息),他只想在内部检查它们是否正确。
  • @MikeRobinson,如果这一切都是真的,那么他需要说出来。我没有做任何假设,所以我要求 OP 澄清他措辞不当的问题。
  • 是的,我只是想检查该值是否有效。我不想显示验证结果

标签: jquery jquery-validate


【解决方案1】:

响应原jsfiddle,请看这个版本:

http://jsfiddle.net/33PGQ/23/

这可以通过三种方式进行修改:首先,在底部,一个简单的布尔值设置为等于两个字段是否有效(然后发出警报)。由于每个 valid() 调用都返回一个布尔值,您可以简单轻松地检查所有表单元素的有效性。

其次,使用没有内部代码的自定义 showErrors 函数扩展了 validate 选项。此函数会覆盖验证错误的默认行为,这样虽然可以检查字段的内部有效性并处理字段的有效性,但不会显示实际的错误文本,从而启用所有验证规则但消除显示验证结果。

最后,虽然在最初的问题中没有明确要求,但我添加了可选的“onsubmit:false”设置,它会覆盖 validate 调用的默认行为,即除非所有验证规则都已成功检查,否则会阻止表单提交。如果您想阻止提交(我假设您会这样做),可以将其删除,但我认为这是一个需要注意的有用功能。我将其包含在此处,以防您遇到特殊情况,即即使表单验证失败,您也希望提交表单。

绝对值得查看验证选项列表;您可以通过多种方式调整验证器的行为以完全满足您的需求。

【讨论】:

  • 实际上我确实需要用于字段验证的消息(在表单提交的情况下)。我还需要在提交时验证表单。但是只有在我设置了一个布尔标志时,我才可以使用 showErrors 函数来显示错误。见jsfiddle.net/dSu3X/5所以..谢谢。赏金是你的!
【解决方案2】:

有一个未记录的方法 check() 专门执行此操作而无需实际设置字段样式或显示任何错误:

var validator = $('form').validate();
if( validator.check('#email') ){
  // this field is valid but no styling was applied
}

【讨论】:

  • 不错!我遇到的一个警告是,这确实将控件的验证状态更改为“已触摸”(我的术语,而不是他们的)。因此,如果您正在输入尚未自动验证/样式化的空白字段,并且您执行此答案中的代码,则控件将在后续按键时开始验证/样式化,而不是正常行为,其中验证/样式会延迟到该字段第一次失去焦点。
【解决方案3】:

有一个 handy method called .checkForm()(截至 2015 年 9 月未记录),这让这非常容易。与调用 .valid() 不同,调用时不会显示表单错误:

// Returns a boolean
$('form').validate().checkForm();

【讨论】:

  • 这验证了所有的表单,操作要求一个特定的字段。
【解决方案4】:

听起来您正在寻找 .valid() 方法。请注意,您仍然必须对整个表单运行 validate() 才能初始化小部件。

http://docs.jquery.com/Plugins/Validation/valid

【讨论】:

  • 它说 validate() 需要在使用此方法检查表单之前在表单上调用。所以我认为如果我在验证整个表单至少一次之前调用它就行不通了?
  • 查看jsfiddle.net/33PGQ/19 有效方法也在触发验证,这与文档中声称的有些相反。
  • 检查jsfiddle.net/33PGQ/21 在调用 $("#form1").validate 方法之前,valid 方法也会返回正确的值。这又与文档中声称的相反!
猜你喜欢
  • 1970-01-01
  • 2021-08-08
  • 1970-01-01
  • 1970-01-01
  • 2018-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-21
相关资源
最近更新 更多