javascript迭代表单元素以查找输入值

时间:2015-11-26 04:21:49

标签: javascript jquery forms loops input

我一直在寻找并且还没有真正找到解决方案,所以我问。

我有一个购物车,需要确认已添加的项目已经存在,并询问用户是否仍想添加。

我尝试的代码确实找到并询问了问题,但它仍然提交并添加了所选项目。

// 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。

谢谢。

2 个答案:

答案 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();
        }
    });
});