Динамическое поле с field_for
У меня есть форма "продать", и я использую 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 %>
Я хотел бы, чтобы текстовое поле "cost" динамически заполнялось значением product.price, когда пользователь выбирает продукт в поле выбора, но я не знаю, как это сделать. На самом деле я не знаю, как получить значение, а затем поставить его...
Кто-нибудь может мне помочь, пожалуйста?
Большое спасибо.
1 ответ
Два способа, которыми я могу думать, что вы можете сделать это, оба с участием JS.
Non-Ajax: создайте ваши параметры и включите атрибуты данных для каждого продукта.
<option value="<%= product.id %>" data-price="<%= product.price %>"><%= product.name %></option>
Затем измените, просто выберите выбранную опцию и поместите ее 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. Минусы: не могу придумать, стоит отметить.