php foreach 循环正在做奇怪的行为来添加值

Posted

技术标签:

【中文标题】php foreach 循环正在做奇怪的行为来添加值【英文标题】:php foreach loop is doing strange behaviuor to add values 【发布时间】:2012-11-05 23:04:54 【问题描述】:

我只是在 foreach 循环中获取产品的价值。现在的逻辑是这样的,当我将获取产品数量时,它将被插入到表单的输入区域,并且当按钮添加到购物车将被单击时该产品数量将显示在结帐页面.. foreach 循环内的代码是这样的

 ![<div class="cart">
    <table class="discount-prices">
      <tr>
        <?php foreach ($discounts as $discount)  ?>
          <td class="discount-price">
            <?php echo sprintf($text_discount, $discount\['quantity'\], $discount\['price'\]); ?>
          </td>
        </tr>
      </table>
      <div>
        <?php echo $text_qty; ?>
        <input type="text" name="quantity" size="2" value="<?php echo $discount\['quantity'\]; ?>" />
        <input type="hidden" name="product_id" size="2" value="<?php echo $product_id; ?>" />
        &nbsp;<input type="button" value="<?php echo $button_cart; ?>" id="button-cart" class="button" />
     </div>
    <?php  ?>]

为按钮工作的jQuery脚本是这样的

$('#button-cart').bind('click', function() 
    $.ajax(
        url: 'index.php?route=checkout/cart/add',
        type: 'post',
        data: $('.product-info input[type=\'text\'], .product-info input[type=\'hidden\'], .product-info input[type=\'radio\']:checked, .product-info input[type=\'checkbox\']:checked, .product-info select, .product-info textarea'),
        dataType: 'json',
        success: function(json) 
            $('.success, .warning, .attention, information, .error').remove();

            if (json['error']) 
                if (json['error']['option']) 
                    for (i in json['error']['option']) 
                        $('#option-' + i).after('<span class="error">' + json['error']['option'][i] + '</span>');
                    
                
             

            if (json['success']) 
                $('#notification').html('<div class="success" style="display: none;">' + json['success'] + '<img src="catalog/view/theme/default/image/close.png"  class="close" /></div>');

                //$('.success').fadeIn('slow');

                $('#cart-total').html(json['total']);

                $('html, body').animate( scrollTop: 0 , 'slow'); 
                setTimeout(opencartpage(),1000);
               
        
    );
);

现在的问题是,当我点击第一个添加到购物车按钮时,它会进入结帐页面,但值是 5 而不是 3。您可以在我点击的图片(第二张图片)中看到在第一个值为“3”但取值为“5”(最后一个值)的按钮上。 另一个问题是添加到购物车的第一个按钮适用于结帐页面,但另外两个添加到购物车的按钮根本不起作用。当单击其余两个按钮时,没有任何反应。那么有人可以帮助我并告诉我这里有什么问题吗?

更新

使用$('.button-cart') 而不是$('#button-cart') 使所有按钮都处于活动状态,这意味着当单击该按钮时,它正在处理结帐页面,但它只采用最后一个值5,可以在第一张图片中看到.那么如何解决这个问题呢?

【问题讨论】:

为什么一定要逃这个&lt;?php echo $discount\['quantity'\]; ?&gt; 打折商品数量从数据库中取出后自动填充到那里 【参考方案1】:

不要将 jQuery 事件绑定到 #button-cart,而是使用 .button-cart。 CSS 在匹配 id 方面相当宽松(即它仍然会匹配所有的),但 jQuery 就不是那么宽容 - 它只会将匹配 id 的事件绑定到 DOM 中的一个匹配元素。

此外,ajax 数据似乎正在发送所有 .product-info 元素,而不仅仅是链接到按钮的元素。这是未经测试的,但尝试类似:

$('#button-cart').bind('click', function() 
    $self = $(this);
    $.ajax(
        ...
        data: $self.children(...),
        ...
    );

【讨论】:

使用 .button-cart 正在完成所有按钮的工作,但现在问题是所有按钮都采用最后一个值,即您可以从第一张图片中看到的“5”。 你的ajax调用另一端的php脚本接收什么数据?

以上是关于php foreach 循环正在做奇怪的行为来添加值的主要内容,如果未能解决你的问题,请参考以下文章

foreach 的奇怪行为

Foreach 循环中奇怪的 SimpleMODAL OSX 动作

删除循环中的控件会导致奇怪的行为

PlaySound 功能奇怪的行为

PHP和HTML:嵌套了HTML的嵌套foreach循环

php foreach循环中的变量