【问题标题】:Updating cart based on values of multiple select tags in rails根据rails中多个选择标签的值更新购物车
【发布时间】: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


【解决方案1】:

您不需要将#{item.id} 附加到所有选择标签。只需添加类quantity_select。然后在你的javascript中

$('.quantity_select').change({ 
  /* your code */
});

还有。获取选择标签的值不是来自选定的:选项。但是:

$('#quantity_select').val()

注意=============================================== ===================== 因为您尝试获取的值来自已更改的选择器。这应该在脚本块中称为$(this).val()

我要说的最后一条评论是,在 Rails 中编码时避免使用双引号 "。默认情况下,使用双引号,rails 会认为它包含要解析的值。像#{val}。如果你不包括解析值,只需使用'

【讨论】:

  • 有什么方法可以让id.quantity_select 元素被更改?我试过$(this).id$(".quantity_select").id,都没有成功。
  • 另外,这并没有解决问题。当我更改选择器时,我没有得到该选择器的值。将更改函数绑定到类可能不是最好的方法。
  • 无法获取函数内部的值是我假设您完全按照我的回答调用它吗?我会更新答案。获取 id 是 $('.quantity_select').attr('id') 并且也是如此。在块内它应该是$(this).attr('id')
  • 现在我有data: {quantityUpdated: $(this).val(), id: $(this).attr('id').substring(1,5) },但它不起作用。
  • 您在开发者控制台中的最终结果应该有点像这样。 jsfiddle.net/57yjq70q
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-29
  • 2013-02-22
相关资源
最近更新 更多