我正在尝试在局部内部进行动态组合选择。并且批次的值不保持不变,即我在部分的第一部分剩余部分中选择的任何批次具有相同的值。
代码如下
表格
<%= 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的批号)分别位于第二和第三部分。并且任何改变产品的尝试,批次nos显示为空,如图所示。
我该如何解决这个问题?我应该在某处使用Parent
还是this
选项?需要指导。
提前致谢。 :)
答案 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
这种方法更清晰,更好。一切顺利:)