1

フォームのパーシャルが動的に呼び出されたときに、 Chosen プラグインが呼び出されない理由がわかりません。

相対宝石 -

 rails, 3.1.0
 cancan, 1.6.7
 dynamic_form, 1.1.4
 simple_form, 2.0.1
 jquery-rails

シナリオ -

というページがあり、 、または/indexを追加できます。ページは空白で始まりますが、クリックしてフォームの 1 つを動的に表示できるリンクが側面にあります。これらのフォームは、独自のパーシャルにあります。HouseDogCat

犬コントローラー

def new
 @dog = Dog.new

 respond_to do |format|
  format.js
 end
end

Dogs/_form.html.erb

<%= simple_form_for(@dog, :remote => true, :html => { :class => 'form-horizontal span8' }) do |f| %>
  <%= render :partial => "shared/error_message", :locals => { :f => f } %>
     <%= f.association :house, :prompt => "Select a House", :input_html => { :id => "house-select", :class => "span4" } %>
  <%= f.button :submit, 'Done', :class => 'btn-primary span2' %>
<% end %>

ページコントローラー

def index
  @cats = current_user.cats.all
  @dogs = current_user.dogs.all

  respond_to do |format|
    format.html
  end
end

ページ/index.html.erb

<li><%= link_to "Dog", new_dog_path, :remote => true %></li>
<li><%= link_to "Cat", new_cat_path, :remote => true %></li>

<div id="generate-form">
  <div class="ajax-loader"></div>
</div>          

犬/new.js.erb

$("#generate-form").html("<%= escape_javascript(render(:partial => 'dogs/form', locals: { dog: @dog })) %>");

このコードはすべて、リンクをクリックすると、選択したフォームを正常に表示します。私の犬のモデルは猫のモデルと同じです。これらは、Chosen プラグインの問題があるものです。いずれかのフォームが表示されたときに Chosen プラグインが検出されないのはなぜですか?

答え

犬/new.js.erb

$("#generate-form").html("<%= escape_javascript(render(:partial => 'dogs/form', locals: { dog: @dog })) %>");
$('.house-select').chosen();
4

1 に答える 1

5

あなたのコード サンプルには、選択したプラグインへの呼び出しは見当たりませんが、同じ問題がありました。

への最初の呼び出し$('.chzn-select').chosen()は、その時点でページにあるすべての DOM 要素に適用されますが、後で追加される要素には適用されません。

AJAX 経由で挿入された新しい.house-select要素にプラグインを追加するには、dogs/new.js.erb の最後にこれを追加します。

$('#generate-form .house-select').chosen();

選択ボックスで jQuery .chosen() 関数を複数回安全に実行できることに注意してください。独自の css クラスを追加して、どのクラスが適用されたかを追跡し、連続実行ではそれらを適切に無視します。

于 2012-06-16T19:33:37.410 に答える