我在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")
item
中的每个Cart
都有一个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})
,但也没有用。现在,控制器不知道哪个项目的数量已经改变。
答案 0 :(得分:1)
您不需要将#{item.id}附加到所有选择标记。只需添加课程quantity_select
即可。然后在你的javascript中
$('.quantity_select').change({
/* your code */
});
也。获取select标记的值不是来自selected:选项。但是:
$('#quantity_select').val()
注意============================================== ====================
因为您尝试获取的值来自已更改的选择器。这应该在脚本块中称为$(this).val()
。
我想做的最后一条评论是在rails中编码时避免使用双引号"
。使用双引号,默认情况下,rails会认为它包含要解析的值。喜欢#{val}。如果您不包含解析值,请使用'