我有一个“卖”形式,我使用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 %>
当用户在select字段中选择产品但我不知道如何执行此操作时,我希望将“cost”text_field动态填充product.price的值。事实上,我不知道如何获得价值,然后把它... ...
有人可以帮帮我吗?
非常感谢。
答案 0 :(得分:0)
我可以想到两种方法,你可以做到这一点,都涉及JS。
<强>非Ajax:强> 构建您的选项,并包含每个产品的数据属性。
<option value="<%= product.id %>" data-price="<%= product.price %>"><%= product.name %></option>
然后在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
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大惊小怪 缺点:想不出任何值得注意的事情。