2015-06-12 47 views
1

我在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每個itemitem_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

你有多個'$(「#quantity_select」)'?你不能有多個具有相同ID的元素... –

+0

我將它改爲'$(「#quantity_select _#{item_id}」)'。 – modsoussi

+0

您可以編輯您的問題,以便我們可以在運行代碼時看到代碼? –

回答

1

您不需要將#{item.id}追加到所有選擇標籤。只需添加類quantity_select即可。然後在您的javascript

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

也。獲取選擇標記的值不是來自selected:選項。但是:

$('#quantity_select').val() 

注======================================== ========================== 因爲您嘗試獲取的值來自已更改的選擇器。這應該在腳本塊中被稱爲$(this).val()

最後的評論我想要避免在rails中編碼時使用雙引號"。使用雙引號,默認情況下,rails會認爲它包含要解析的值。像#{val}。如果你不包括解析值,只需使用'

+0

發送該函數中的id。有沒有什麼辦法可以獲得被改變的'.quantity_select'元素的'id'?我試過'$(this).id'和'$(「。quantity_select」).id',但都沒有成功。 – modsoussi

+0

此外,這並沒有解決問題。當我改變一個選擇器時,我沒有得到選擇器的值形式。將更改函數綁定到類可能不是實現此目的的最佳方法。 – modsoussi

+0

不能得到函數內部的值是我假設你完全按照我的回答調用它?我會更新答案。 獲取id是'$('。quantity_select')。attr('id')' 並且也是這樣。在塊內它應該是'$(this).attr('id')' –

相關問題