1

さて、パーシャル内で動的なコンボ選択をしようとしています。バッチ番号の値は同じままです。つまり、部分の最初の残りの部分で選択したバッチ番号は同じ値を持ちます。

コードは次のとおりです

<%= nested_form_for(@bill) do |f| %>

    <%= f.label :name %><br />
    <%= f.text_field :name %>
  <%= f.link_to_add "add product", :bill_line_items %>
    <%= f.submit %>
<% end %>

部分的な

<%= javascript_include_tag 'testing' %>
  <div class ="kool">

  <div class ="name"><%= f.label :product_id %>
<%= f.collection_select :product_id,Product.all ,:id,:name, :style => 'width:150px;'%></div><br />

    <div class="list">
    <%= f.label :batch_no %><br />
    <%= f.grouped_collection_select :batch_no, Product.all, :store_opening_stocks, :id, :batch_no, :batch_no %><br/></div>

  </div>

Jsファイル

    jQuery(document).ready(function(){
       var batchNo = jQuery('.list').html();

  jQuery('.name').bind('change',function() {

     var  productSelected = jQuery('.name:selected').val();

   var options = jQuery(batchNo).find("optgroup[label='" + productSelected + "']").html();

     jQuery('.list select').html(options);

            });
          });

製品選択前のスクリーンショット

商品を選ぶ前に

スクリーン ショット 製品を選択して [製品の追加] をクリックした後

製品を選択し、製品の追加をクリックした後

製品を再度選択した後のスクリーンショット

商品を再選択中

Product-2 グループ、つまり P1 と P2 (製品 2 のバッチ番号) が 2 番目と 3 番目の部分で来ることがわかります。製品を変更しようとすると、図に示すようにバッチ番号が空で表示されます。

この問題を解決するにはどうすればよいですか?? Parentどこかまたはオプションを使用する必要がありthisますか?? ガイダンスが必要です。

前もって感謝します。:)

4

1 に答える 1

1

これを試して。それが役立ちます。親要素を使用して、その特定のフォームの値を取得します。この場合、親はkoolこのメソッドよりも getJSON メソッドの方が好まれるため、コードは次のようになります。

jQuery(document).ready(function()
{
jQuery(".prod select").bind("change", function() {
      var data = {
        product_id: jQuery(this).val()  
      }
      var wrapperDivElement = jQuery(this).parents(".kool");
      jQuery.getJSON(
         "/customer_bills/get_batch",
        data,
        function(data){
      var result = "",a;
      var b = "<option>Select Batch no</option>"
      for(i=0;i<data.length; i++)
      {
       a = data[i];  
       result = result + "<option value="+a[0]+">"+a[0]+"</option>";
      }
       jQuery('.batch select', wrapperDivElement).html(b+result);
      });            
        });
    }); 

コントローラーで

def get_batch
    @product_batch = StoreOpeningStock.find_all_by_product_id(params[:product_id]).map{|p| [p.batch_no, p.price]} if params[:product_id]
    respond_to do |format|
      format.json { render json: @product_batch }
    end
  end

そしてルートで

resources :customer_bills do
    collection do
      get :get_batch
    end
  end

この方法は、はるかに明確で優れています。ではごきげんよう :)

于 2012-09-13T09:20:38.947 に答える