【发布时间】:2023-03-11 07:49:01
【问题描述】:
我在 Rails 中实现了一个购物车,因此在显示所述购物车时,每个项目的数量都显示为一个选择标签,以允许用户更改数量(亚马逊这样做的方式。)这就是我生成选择的方式标签,我为购物车中的每个item 做的:
<%= form_for :session, url: update_cart_path, html: { method: 'post'} do |f| %>
<%= f.select :quantity_updated,
options_for_select((1..item.quantity).to_a, quantity),
{} ,{id: "quantity_select_#{item_id}"} %>
<% end %>
这是我的 JavaScript 代码:
$(document).ready ->
$("#quantity_select").change ->
$.ajax "update_cart",
method: "POST",
data: {quantityUpdated: $("#quantity_select option:selected").val()},
dataType: "script",
error: (jqXHR, textStatus, errorThrown) ->
console.log("AJAX error: #{textStatus}")
success: (data, textStatus, jqXHR) ->
console.log("AJAX OK")
Cart 中的每个item 都有一个item_id。为了让每个项目的数量选择标签都有唯一的 ID,我将 {id: "quantity_select"} 更改为 {id: "quantity_select_#{item_id}"}。我必须在 JavaScript 文件中进行哪些更改才能正确处理每个 select_tag 更改?以及如何将item_id 发送到控制器?我试过url: update_cart_path(item_id: item_id),但没用。我也试过$.ajax "update_cart(#{item_id}),但也没有用。现在控制器不知道哪个项目的数量被改变了。
【问题讨论】:
-
你有多个
$("#quantity_select")吗?不能有多个具有相同 ID 的元素... -
我把它改成了
$("#quantity_select_#{item_id}")。 -
您能否编辑您的问题,以便我们在您运行代码时看到它?
-
完成。不过这并没有运行,因为此时没有
quantity_select标签。 -
我说的是你的JS代码的第二行。您只绑定到
$('#quantity_select'),而不是每个人。也许您需要分配一个类选择器并使用$('form').on('change','.quantity_select',function() {etc.} );?然后您可以使用$(this).attr('id')从该函数内部发送 id
标签: jquery ruby-on-rails ajax ruby-on-rails-4