我有一个"sell"表单,我使用fields_for来放置关于要销售的产品的信息。
下面是我的fields_for表单:<%= f.fields_for :sellproducts do |c| %>
<%= c.label :product %> <%= c.grouped_collection_select :product_id, Category.order(:name), :products, :name, :id, :name, :include_blank => true %>
<%= c.label :quantity %> <%= c.text_field :quantity, :size =>"5" %><br />
<%= c.label :cost %> <%= c.text_field :cost, :size =>"5" %>
<%= c.link_to_remove "Delete" %>
<% end %>
我想有"成本"text_field动态填充与产品的值。价格时,用户选择的产品在选择字段,但我不知道如何做到这一点。事实上,我不知道如何获取值,然后把它…
有谁能帮帮我吗?
我认为有两种方法可以做到这一点,都涉及到JS。
非ajax: 构建您的选项,并为每个产品包含数据属性。
<option value="<%= product.id %>" data-price="<%= product.price %>"><%= product.name %></option>
然后onchange,只需抓取选中的选项,并将其data-price放入成本输入字段。
$('body').on('change', 'select.products', function(){
var that = $(this),
, costInput = that.parent("fieldset").("input.cost"); # Perhaps if you wrap the elements in a fieldset
costInput.val(that.find('option:selected').val())
});
优点:数据就在那里缺点:您将不得不管理表单帮助器附带的"选定"部分
Ajax(更好的方式):添加一个onchange事件,检索所选产品的价格。
$('body').on('change', 'select.products', function(){
var that = $(this),
, costInput = that.parent("fieldset").("input.cost"); # Perhaps if you wrap the elements in a fieldset
$.ajax({
url: "products/price",
data: {id: that.find('option:selected').val()),
dataType: 'script'
}).done(function ( price ) {
costInput.val(price)
});
});
优点:不需要为html而烦恼缺点:想不出有什么值得注意的