Rails 5 - form.select 上的 jQuery 验证仅在提交后有效

Posted

技术标签:

【中文标题】Rails 5 - form.select 上的 jQuery 验证仅在提交后有效【英文标题】:Rails 5 - jQuery validate on form.select only works after submitting 【发布时间】:2018-04-04 12:43:14 【问题描述】:

我有一个需要验证的下拉菜单,但它的行为不像我预期的那样。

# app/views/forms/_form.html.erb

<%= form.select :environment, [ 'Production', 'Staging', 'Test' ],
 prompt: 'Select an Environment' ,  required: true  %>


# app/assets/javascripts/forms.js
$('form#new_form').validate(
  validClass: "valid",
  errorClass: "invalid",
    rules: 
      'form[environment]':  required: true ,
    
);

重现步骤:

    点击下拉菜单 选择一个选项;生产、暂存或测试 valid 类被添加到下拉列表中 -- 这就是问题所在--点击下拉列表中的返回并选择提示Select an Environmentinvalid不会添加到下拉列表中。

上述步骤只有在我提交表单并注意错误时才能正常工作。然后,当我重复步骤 1-5 时,当我选择一个选项(生产、暂存或测试)时会添加 valid 类,当我选择提示 Select an Environment 时会添加 invalid

【问题讨论】:

【参考方案1】:

根据文档 (https://jqueryvalidation.org/documentation/),它的行为符合预期。

在字段被标记为无效之前,验证是惰性的:之前 第一次提交表单,用户可以tab通过 字段不会收到烦人的消息——它们不会被窃听 在有机会实际输入正确值之前

一旦一个字段被标记为无效,它就会被急切地验证:只要 用户输入了必要的值,错误信息被删除

【讨论】:

感谢您的澄清!我以为我要疯了!我从用户的角度理解,我们真的不想用这么多消息“惹恼”他们,但是让这种行为“不懒惰”是否可行?

以上是关于Rails 5 - form.select 上的 jQuery 验证仅在提交后有效的主要内容,如果未能解决你的问题,请参考以下文章

select2 在 form.submit 上清除了多项选择(ruby on rails)

如何在 Ruby on Rails 中使用带有 form.select 的 jquery .click() 方法?

如何将两个属性作为 text_method 传递给 rails 中的 collection_select

表单中f.select上的“未定义”占位符

Ruby on Rails 表单添加带有文本框的“其他”选项以选择下拉菜单

Rails 5.0 到 5.1 - 一对多关联上的“Cant cast Hash”