Я пытаюсь отобразить значение поля выбора для стоимости доставки ниже поля.Благодаря @Vasfed я пытаюсь использовать атрибуты данных и JavaScript.Но хотя атрибут данных отображается в DOM при загрузке th-страницы, он не возвращается в данных, возвращаемых для вызова AJAX при проверке консоли или ресурсов.
В DOM:
<select id="shippingservices_select" name="cart[shippingservice_id]"><option value="">select a carrier</option>
<option value="7" data-price="3.9">UPS</option>
<option value="19" data-price="10.0">DHL</option>
</select>
Полученный фрагмент:
$("#shippingservices_select").empty()
.append("<option value=\"7\">UPS<\/option><option value=\"19\">DHL<\/option>");
Я использую следующий вызов ajax:
$(document).on("change", "#lands_select", function(event){
jQuery.ajax({
url: "/carts/update_shipping/" + event.target.value,
type: "GET",
error: function (xhr, status, error) {
console.error('AJAX Error: ' + status + error);
},
success: function (response) {
console.log(response);
}
});
});
, который должен возвращать как значение, так и атрибут данных, для формы:
<%= form_for :cart, :url => {:action => "show_shipping"}, :html => { :method => "get", :remote => true } do |f| %>
<%= f.collection_select(:land_id, Land.all, :id, :name, {:prompt => "select a country"}, {:id => 'lands_select'}) %><br>
<%= f.select(:shippingservice_id, options_for_select(@shippingservices.collect { |s| [s.name.titleize, s.id, {'data-price' => s.price}] }), {:prompt => "select a carrier"}, {:id => 'shippingservices_select'}) %><br>
<% end %>
Shipping: €<div id="shipping_cost"></div><br>
с представлением update_shipping.js.erb:
$("#shippingservices_select").empty()
.append("<%= escape_javascript(render(:partial => @shippingservices)) %>");
и обработанным частичным _shippingservice.html.erb из:
<option value="<%= shippingservice.id %>" data-price="<%= shippingservice.price %>"><%= shippingservice.name.titleize %></option>
В контроллере у меня есть:
def update_shipping
...
respond_to do |format|
format.js
end
end
После моего частичного _shippingservice.html.erb я должен получить и значение, и атрибут данных, но я не получаю.Я думаю, что это причина, по которой:
$(document).on("change", "#shippingservices_select", function(event){
var price = $(event.target).data('price');
$("#shipping_cost").html(price);
});
не возвращает значение data-price.
Как я могу заставить это работать?Заранее спасибо.
ОБНОВЛЕНИЕ
Я пытался ее устранить, и все выглядит довольно странно.
Оба селектора отображают данные вDOM.Поле выбора службы доставки, которое загружается при загрузке страницы, показывает все.При изменении селектора земель загружаемая часть, которую я могу просмотреть в консоли, отображает только значение параметра + имя, но при изменении части _shippingservice я обнаружил, что код, загружаемый через AJAX, по-видимому, не генерируетсячастично указывается в вызове JS Ajax, поскольку я могу изменить код внутри, не оказывая никакого влияния на доставленную полезную нагрузку.
Но при замене
<%= escape_javascript(render(:partial => @shippingservices))%>
на
<%= escape_javascript(render ‘carts/shippingservice’)%>
Ничего не отображается и не загружается.