【问题标题】:Rails form validation does not work if form is initially hidden如果表单最初是隐藏的,Rails 表单验证不起作用
【发布时间】:2013-05-08 19:05:44
【问题描述】:

我在使用 rails 表单验证时遇到了一个奇怪的问题。目前,如果表单在页面加载时可见,则验证工作正常,但如果表单最初隐藏并在用户与页面交互时显示,则不会发生任何事情。

型号

class PushNotification < ActiveRecord::Base
  belongs_to :application, foreign_key: :appId, primary_key: :appid

  validates :message, :presence => true, :length => { maximum: 75 }
  validates :max_message_frequency, :presence => true, :numericality => {:only_integer => true, :greater_than => 0}
  validates :appId, :presence => true
end

HTML 表单

<div id="push-message-tab" class="tab-section">
    <%= form_for(PushNotification.new,
                     url: messaging_messaging_cohort_create_push_path(@application, @cohort),
                     remote: true, validate: true,
                     html: {
                             id: :push_notification_create_form,
                             class: 'new_push_notification_create ' + (@cohort.new_record? ? 'default-segment' : ''),
                             autocomplete: "off"
                     }) do |f| %>


            <div class="push-form-component-header">
              <%= f.label :message, 'Message' %>
              <span id="message-char-counter-wrapper"><b id="char-counter">75</b> characters left</span>
            </div>
            <div class="actions">
              <%= f.submit "Save", id:'submit-push', class: 'with-spinner', data: {waiting_text: "Saving"} %>
            </div>
    <% end %>
</div>

如果页面加载时 push-message-tab 元素可见,rails 表单验证效果很好,但当我指定 style="display: none" 并动态切换可见性选项时,它就不行了。表单将在不执行任何验证的情况下发送。

我正在使用带有 ruby​​ 1.9.2 的 rails 3.1

感谢您的支持

【问题讨论】:

  • 您是指客户端验证还是服务器端验证?如果是服务器端,只要表单提交正确,就不可能数据没有被验证。
  • 对不起,我忘了说我正在使用客户端验证。

标签: ruby-on-rails forms validation hidden


【解决方案1】:

您似乎正在使用 client_side_validations gem。

根据他们的文档 (https://github.com/bcardarella/client_side_validations) 并假设您正在谈论客户端验证,我建议您在您的 javascript 中尝试这样的操作:

$('#your_form').resetClientSideValidations();

就在您将表单设置为显示之后。

【讨论】:

  • 它仅在表单可见之后工作。如果在窗体仍处于隐藏状态时调用它,则它不起作用。
  • 这就是我所说的“就在您将表单设置为显示之后。”
猜你喜欢
  • 1970-01-01
  • 2021-12-01
  • 1970-01-01
  • 2022-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-28
  • 1970-01-01
相关资源
最近更新 更多