7

RoR アプリケーションで SimpleForm、ClientSideValidations、および ClientSideValidations-SimpleForm ジェムを使用しています。フォームをモーダルに美しくレンダリングできますが、入力がフォーカスを失うと検証が行われず、フォームが送信されます。また、ここにある修正を使用してみたことにも注意して ください。ツイッター-ブートストラップ/

フォームを含むビューのセグメント:

<div class='modal hide' id='New_Discrep' tabindex="-1" role='dialog' aria-labelledby="#New_Discrep_Label" aria-hidden='true'>
  <div class="modal-header">
    <button type='button' class='close' data-dismiss='modal' aria-    hidden='true'>x</button>
    <h3 id="New_Discrep_Label">Create Discrepancy</h3>
  </div>
  <%= simple_form_for @new_discrepancy, :validate => true, :url => {:controller=> 'discrepancy', :action => 'create', :device_id => @device.id} do |f| %>
  <div class='modal-body'>
    <%= f.input :system, :wrapper => :prepend, :label => false do %>
      <%= content_tag :span, 'System', :class => 'add-on input-label' %>
      <%= f.input_field :system %>
    <% end %>
    <%= f.input :description, :wrapper => :prepend, :label => false do %>
      <%= content_tag :span, 'Description', :class => 'add-on input-label' %>
      <%= f.input_field :description, :class => 'textarea' %>
    <% end %>
    <%= f.input :conditions, :wrapper => :prepend, :label => false do %>
      <%= content_tag :span, 'Condiditions', :class => 'add-on input-label' %>
      <%= f.input_field :conditions, :class => 'textarea' %>
    <% end %>
    <%= f.input :dirf, :wrapper => :prepend, :label => false do %>
      <%= content_tag :span, 'Reference', :class => 'add-on input-label' %>
      <%= f.input_field :dirf %>
    <% end %>
  </div>
  <div class='modal-footer'>
    <button type="button" class='btn', data-dismiss='modal', aria-hidden='true'>Cancel</button>
    <%= f.button :submit, :class => 'btn-primary' %>
  </div>
  <% end %>
</div>

私のGemfile

gem 'rails', '3.2.1'
gem 'jquery-rails'
gem 'carrierwave'
gem 'simple_form'
gem 'client_side_validations'
gem 'client_side_validations-simple_form'

モデル

class Discrepancy < ActiveRecord::Base
STATUSES = ['Open', 'Closed', 'Rejected']

  belongs_to :device
  belongs_to :user
  has_many :parts
  has_many :updates

  validates :date_entered, :presence => true
  validates :status, :presence => true
  validates :description, :presence => true
  validates :system, :presence => true
  validate :close_date

  validates_inclusion_of :status, :in => STATUSES, 
    :message => "must be one of: #{STATUSES.join(', ')}"  

end

application.js ファイル

//= require jquery
//= require jquery_ujs
//= require rails.validations
//= require rails.validations.simple_form
//= require_tree .

また、フォーム直下のhtmlにscriptタグが生成されていることも確認しております。助けてくれてありがとう!

4

3 に答える 3

14

すべてのロジックは、目に見える入力を持つフォームに適用されます。入力はページの読み込み時に表示されないため、イベントは添付されません。

以下は私のために働いた:

$('#myModal').on('shown', function () {
  $(ClientSideValidations.selectors.forms).validate();
});
于 2012-11-09T17:56:48.403 に答える
1

新しいブートストラップ バージョン:

$('#myModal').on('shown.bs.modal', function () {
  $(ClientSideValidations.selectors.forms).validate();
});
于 2013-10-20T04:54:13.947 に答える
1

README には、実際にはこれを行うためのより具体的な機能が詳しく説明されています。

$(new_form).enableClientSideValidations();

https://github.com/bcardarella/client_side_validations#enabling

于 2013-03-01T11:21:53.080 に答える