带有jquery错误的嵌套表单: - 新值覆盖部分中的先前选定值

时间:2012-08-01 05:40:09

标签: javascript jquery ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2

我正在尝试在局部内部进行动态组合选择。并且批次的值不保持不变,即我在部分的第一部分剩余部分中选择的任何批次具有相同的值。

代码如下

表格

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

            });
          });

选择产品前的屏幕截图

before Selecting the product

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

after selecting product and clicking add product

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

Reselecting product again

正如您所看到的那样,产品-2组P1和P2(产品2的批号)分别位于第二和第三部分。并且任何改变产品的尝试,批次nos显示为空,如图所示。

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

提前致谢。 :)

1 个答案:

答案 0 :(得分: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

这种方法更清晰,更好。一切顺利:)