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);

            });
          });

选择产品前的屏幕截图

在选择产品之前

屏幕截图 选择产品并单击添加产品后

选择产品并点击添加产品后

重新选择产品后的屏幕截图

再次重新选择产品

如您所见,产品 2 组,即 P1 和 P2(产品 2 的批号)出现在第二部分和第三部分中。以及任何更改产品的尝试,批号显示为空,如图所示。

我该如何解决这个问题?我应该使用Parent某处或this选项吗?需要指导。

提前致谢。:)

4

1 回答 1

1

试试这个。我会帮你的。使用父元素来获取该特定表单的值。在这种情况下, parent 是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 回答