1

我在使用 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

谢谢您的支持

4

1 回答 1

4

您似乎正在使用client_side_validations gem。

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

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

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

于 2013-05-08T19:39:47.543 回答