jquery validate - 在提交之前添加规则

Posted

技术标签:

【中文标题】jquery validate - 在提交之前添加规则【英文标题】:jquery validate - add rule before submit 【发布时间】:2016-04-27 00:05:52 【问题描述】:

我的大部分问题都在这个问题https://***.com/questions/34846925/jquery-validate-rails-4-dynamically-update-rule-after-rendering-partial-via-a

我没有得到任何反馈。我知道这可能很难理解。基本上我需要在提交之前根据 html 数据属性更改规则的参数。我想知道是否有办法做到这一点。

我尝试在 submitHandler 中添加规则:

$('#custom-tag').validate(
    onfocusout: false,
    submitHandler: function(form) 
      $('#custom-tag').rules("add", 
        tagUniqueness: $('#taglist').data('tag-list').split(', ')
      );
    ,
    rules: 
      tag: 
        minLengthSquish: 2,
        maxLengthSquish: 25,
        alphanumericAndWhitespace: true
      
    ,
    tooltip_options: 
      tag:  placement: 'right', animation: false 
    
  );

但这不起作用,我现在意识到 submitHandler 是在提交有效时运行的代码(可能应该称为 validSubmissionHandler)。

我还假设添加已存在的同名规则将覆盖当前规则和参数。如果没有,我只需要删除然后添加。

有没有办法在提交之前添加规则?

【问题讨论】:

请不要多次发布同一个问题。如果您第一次没有得到足够的关注,请read this page 并对您的原始问题进行必要的修改。 你不能把.rules()方法放在.validate()方法里面。此外,submitHandler 仅在有效表单上触发,因此无论如何这都行不通。 @Sparky 我不认为这是重复的。我试图通过简单地询问如何在提交之前立即添加规则来简洁地回答这个问题。我以为我没有对另一个问题引起注意,因为发生了太多事情,所以我试图将它分解成更容易消化的部分。也许我应该删除另一个,然后只问这样的小问题,最终会找到解决方案。 是的,删除另一个,我可以重新打开这个。 @Sparky 它要求在删除之前重新打开它 【参考方案1】:

看来您应该将提交处理程序或验证处理程序移出。 IE,像这样:

$('form').submit(function(event) 
  $('#custom-tag').rules("add", 
    tagUniqueness: $('#taglist').data('tag-list').split(', ')
  );

  if ($('#custom-tag').valid() === false)   
    // 'this' is the form, 
    event.preventDefault();
    // stop the submittion
    // ...message the user to let them know why the submit failed.
  
);

【讨论】:

我认为您没有理解我的问题。我想在任何类型的提交之前添加一条规则。这不应该取决于提交是否有效,因为没有提交任何内容。 请再次查看我发布的代码。它确实在任何提交上添加了规则。在添加规则之后调用 valid() 以确保在大声提交之前检查新规则。否则,您可能会发现自己在检查该字段后添加了规则,而您的新规则不会生效。 该插件提供了一个submitHandler 回调函数,因此您不必创建自己的。通过使用.submit() 处理程序,您可能会破坏或绕过验证插件。 @sparky。正如您在对该问题的评论中指出的那样,我们不想在 validate 函数中添加规则。通过使用表单上的提交事件,我们可以添加规则并触发手动验证,而不会破坏验证。唯一的缺点是验证代码将在该字段上运行两次,这确实会旋转几个额外的周期,但不会破坏任何东西,并且不太可能对性能产生明显的影响。 有更好的方法来做到这一点。将按钮更改为type="button",然后捕获它的click,而不是它的submit。然后你可以在这个点击处理程序中做任何你想做的事情并以编程方式触发验证/提交。

以上是关于jquery validate - 在提交之前添加规则的主要内容,如果未能解决你的问题,请参考以下文章

使用 .on 和 .validate 的 jQuery 必须提交两次表单才能验证

jQuery Validate:在 ASP.NET MVC 5 应用程序中添加事件以提交按钮单击

当 jquery.validate 验证表单时启用提交按钮

ASP.NET MVC 应用程序:添加了 jQuery 事件来提交按钮单击,现在 jQuery Validate 插件不再工作。

jQuery Validation插件在无效时重复提交错误

JQuery validate + Gravity 表单冲突?