使用field_for的动态字段



我有一个"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而烦恼缺点:想不出有什么值得注意的

相关内容

  • 没有找到相关文章

最新更新