我一直在寻找并且还没有真正找到解决方案,所以我问。
我有一个购物车,需要确认已添加的项目已经存在,并询问用户是否仍想添加。
我尝试的代码确实找到并询问了问题,但它仍然提交并添加了所选项目。
// check if item exists
$(".add_to_order").on("click", function() {
var current_id = $(this).data("id");
return $(".order_list input").each(function() {
if ( current_id == $(this).val() ) {
return confirm('Item exists, still want to add?');
}
});
});
PHP(CodeIgniter)/ HTML(Bootstrap)
<?php if ($products) {
foreach($products as $product){ ?>
<form action="/orders/add_to_order" method="get">
<button class="add_to_order" type="submit" data-id="<?php echo $product->id; ?>">Add to Cart</button>
</form>
<?php } } ?>
车
<form action="/orders/send" method="post" id="order">
<?php foreach($order_products as $order_product) { ?>
<input class="added_product" type="hidden" value="<?php echo $order_product->product_id; ?>" />
<?php } ?>
<button type="submit">Order</button>
</form>
我选择隐藏产品ID。
谢谢。
答案 0 :(得分:0)
<强>问题强>
AFAIK,jQuery的.each()
函数不返回值。
当你这样做时:
return $(".order_list input").each(function() {
if ( current_id == $(this).val() ) {
return confirm('Item exists, still want to add?');
}
});
内部回报只返回.each()
,但其值不会转到return
。
<强>解强>
我认为解决这个问题的最简单方法是设置一个变量confirmed
并像这样使用它:
var confirmed = true;
return $(".order_list input").each(function() {
if ( current_id == $(this).val() ) {
confirmed = (!confirmed) ? false : confirm('Item exists, still want to add?');
}
});
return confirmed;
这将从confirmed
开始为真,如果单个confirm()
被按下为假(如果用户取消),则confirmed
将保持为假。
答案 1 :(得分:0)
找到解决方案......
$(".add_to_order").on("click", function(e) {
var current_id = $(this).data("id");
$(".order_list input").each(function() {
if ( current_id == $(this).val() ) {
if (confirm('Item exists, still want to add?') == false)
e.preventDefault();
}
});
});