gpt4 book ai didi

javascript - 暂停 Jquery.each 循环以确保代码完全执行?

转载 作者:行者123 更新时间:2023-12-02 20:27:01 25 4
gpt4 key购买 nike

简单问题 - 我有一个 $.each 循环,内部有一个带有回调函数的函数调用

我可以在回调函数中放入什么来继续循环

$.each(product, function () {
AddToCart($(this), function () {

});
});

现在 - 如果循环浏览 5 个产品,则只有最后一个会添加到购物车

我需要一种暂停循环的方法,以确保在添加下一个产品之前将产品添加到购物车

谢谢!

这是 AddToCart 函数:

function AddToCart(product, callback) {
//Get the product ID and info
var product = product;
var productid = product.children(".productId").val();
var productName = product.children(".productName").val();
var productPage = product.children(".productPage").attr("href");
var productImage = product.find(".productImage").attr("src");
var productPrice = product.find(".productPrice").val();
var productMSRP = product.find(".productMSRP").val();

var productList = $("#productList");
var exists = false;
listItems = $("#productList").find("li");
// Loop through to see if the product has already been added
listItems.each(function (idx, li) {
var item = $(li);
var itemId = item.children(".productId").val();
if (itemId == productid) {
exists = true;
//find its quantity
var quantity = item.children(".quantity").html();

//increment the quantity
quantity = parseInt(quantity) + 1;
item.children(".quantity").html(quantity);
}
});

if (!exists) {
var listItem = "<li>" +
"<a href='" + productPage + "'><img height='80px' src='" + productImage + "'/></a>" +
"<input type='button' value='X' class='cartRemoveBtn'/>" +
"<span class='quantity'>1</span>" +
"<div class='tooltip_info'>" +
"<span class='tooltip_name'>" + productName + "</span>" +
"<span class='tooltip_price'>Our Price: $" + parseFloat(productPrice, 10).toFixed(2) + "</span>" +
"<span class='tooltip_msrp'>List Price: $" + parseFloat(productMSRP, 10).toFixed(2) + "</span>" +
"<span class='tooltip_savings'>You Save: $" + parseFloat(productMSRP - productPrice, 10).toFixed(2) + "</span>" +
"</div>" +
"<input type='hidden' class='productId' value='" + productid + "' />" +
"<input type='hidden' class='productPrice' value='" + productPrice + "' />" +
"<input type='hidden' class='productMSRP' value='" + productMSRP + "' />" +
"</li>";


productList.prepend(listItem);
}
OpenCart();
updateTotals();
initializeCart();
refreshTooltips();
$.post('/Store/Cart/AddToCart/' + productid, function () {
callback();
});
return false;
}

最佳答案

$.each 函数已经是同步的,这意味着它一次从第一个到最后一个单步执行每个产品。第一个函数调用会阻塞第二个函数调用,直到第一个函数返回。

这是一个有效的伪代码示例:

function AddToCart(item, callback){
alert(item);
};

var products = [1,2,3,4,5];

$.each(products, function(index, product){
AddToCart(product);
});

可能的问题

AddToCart 函数正在注册 post 回调(来自 AddToCart 内部的异步调用),这意味着它在 post 函数有时间完成之前返回。我不知道您的回调正在做什么,但这可能是在第一篇文章从“/Store/Cart/AddToCart/”返回之前完成所有 AddToCart 调用

解决方案

运行取决于 AddToCart 函数回调内帖子返回的代码。

替代解决方案

使用另一种形式逐步浏览产品...这使用 AddToCart 的回调来调用下一个产品添加。

function AddEachToCart(products) {
// ensure products is not a js Array
products = $(products).toArray();
if (products.length > 0)
AddToCart(products.shift(), function(){AddEachToCart(products)});
};

关于javascript - 暂停 Jquery.each 循环以确保代码完全执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4683738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com