![](/img/trans.png)
[英]changing cart items quantity in shopping cart using vanilla javascript
[英]Shopping cart in javascript object, with an array of json object quantity of items
我在javascript / json和ASP MVC中遇到一些購物車問題
場景:主要功能是訂購產品,但不是1位用戶的普通購物車,它可以是2位用戶,3位用戶,1位用戶等, 但只能訂購1個購物車 (javascript對象)。 那取決於特定的購買者 。 因此,主要問題是,如果買方為用戶1購買了一個“蛋糕”,然后又想用不同的日期和相同的“蛋糕”向用戶2購買某物,那么該產品將是“ 2個蛋糕”,但對於第二個用戶來說,第一個用戶丟失了“蛋糕”。
我也需要特定用戶和日期。 因此,如果買方為2014年1月1日的用戶1購買蛋糕(例如,使用日期選擇器),然后為2014年2月2日的用戶2購買蛋糕(例如,使用日期選擇器),則產品的數量為每個用戶1個蛋糕,而不是2個蛋糕與數組中的蛋糕數量。
實際上,我正在將javascript對象用於購物車,就像這樣
var ShoppingCart = {
BuyerID: 1, //I will handle this later
StoreID: 1,
Total: 0,
ShoppingCartItems: [] //array with json objects
};
然后我使用一個函數將按鈕上需要的元素推送到數組
function AddItem (ProductID,ProductName, Description, Price, Quantity, StoreID){
var UserID = $("#hiddenUserID").val(); //e.g. = 1
var ProductDate = $("#hiddenDateField").val(); //e.g. = 2014/05/01
ShoppingCartItems.push({
"ProductID": ProductoID,
"ProductName": ProductName,
"Description": Description,
"Price": Price,
"Quantity": Quantity,
"StoreID": StoreID,
"UserID": UserID, //this will change later
"ProductDate": ProductDate //this will change if the buyer choose another day
})
}
每當買方單擊按鈕時,此功能就起作用。 產品裝載了ajax,這不是問題。 用戶從產品中選擇之后,將使用所選產品和我使用的所有規格創建一個新的陣列。 所以我有兩個問題
例如,如果買方選擇1個蛋糕,但他忘記了需要2個蛋糕,那么如果他再次單擊第二個蛋糕,則陣列將推入數量為1的新元素或其他產品
我想如果具有相同ProductID,userID和日期的產品將數量更新為2個蛋糕,因為第二個問題源自第一個蛋糕,我需要通過ProductID,userID和日期來更新數量,因為如果買方打算購買對於每個用戶來說都是一個蛋糕,需要將產品分開,例如這種方式是錯誤的:
userID = 1的產品
userID = 2的產品
我希望數組將產品ID,用戶ID和日期的數量分開,因此每個產品都需要在用戶ID和日期之間有一個“鏈接”,以便具有以下內容:
userID = 1的產品
userID = 2的產品
因此,如果user1和user 2在同一日期具有相同的產品,則需要驗證以按userID和DATE分隔每種產品的數量,這是個大問題。
實際上,我使用MVC,因此這種方式是將json和ajax發送到特定模型的最佳方法(對於modelstate.isvalid)。 因此,此代碼已通過“測試”了我需要的正確數據到數據庫的內容。 希望有人可以幫助我。
提前致謝
將新項目推入購物車時,需要將其屬性與購物車中的對象進行比較,如果產品ID,用戶ID和日期匹配,則要將新數量添加到舊對象的舊數量中而不是推一個新的。 或者,您可以在添加項目后對購物車數組進行后處理,並在添加數量的同時合並重復項。 我不確定哪種方法更好。
function AddItem (ProductID,ProductName, Description, Price, Quantity, StoreID) {
var merged = false;
var UserID = $("#hiddenUserID").val(); //e.g. = 1
var ProductDate = $("#hiddenDateField").val(); //e.g. = 2014/05/01
var newItemObj = {
"ProductID": ProductID,
"ProductName": ProductName,
"Description": Description,
"Price": Price,
"Quantity": Quantity,
"StoreID": StoreID,
"UserID": UserID,
"ProductDate": ProductDate
};
// loop through items in cart
for ( var i = 0; i < ShoppingCartItems.length; i++ ) {
// if product ID, user ID, and date are the same
if ( ShoppingCartItems[i].ProductID == newItemObj.ProductID &&
ShoppingCartItems[i].UserID == newItemObj.UserID &&
ShoppingCartItems[i].ProductDate == newItemObj.ProductDate ) {
// add the quantity of the new obj to the old one
ShoppingCartItems[i].Quantity += newItemObj.Quantity;
// if two items are merged, set a flag
merged = true;
}
};
// if no merge happened, just add the item normally
if ( !merged ) {
ShoppingCartItems.push( newItemObj );
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.