1

我创建了一个函数,它向 PHP 文件发出 ajax 请求,然后将产品添加到购物篮中。此功能在第一次单击时正常工作,但在每次后续单击时,它会再次运行该功能。因此,例如,在第 2 次单击它会运行该功能两次,在第 3 次单击它会运行它 3 次,依此类推......刷新页面时会重置问题......

这是点击代码:

    $("#add_123456").click(function () {  
      $("#add_123456").addClass('added');          
      var quantity = $("#qty_123456").val();
      $('#basket_1').submit(function (event) {
        event.preventDefault();
        basket_add("feqf73nbdw7","123456","XYZ123","1","0.1","19.23");            
      });      
    });

这是功能:

    function basket_add(cartID, productID, code, quantity, weight, price) {  
      var item_add = {"Cart_ID": cartID, 
                      "Product_ID" : productID,
                      "Code" : code,
                      "Qty" : quantity,
                      "Weight" : weight,
                      "Price" : price
                      };            
      $("#basketpop").animate({top: "40px"}, 200);    
      $.ajax({
        url:  '/templates/new/includes/ajax/add_to_basket.php',
        type: 'POST',
        data: item_add,
        dataType: "html",
        success: function(html){
          $('.basket_content').empty().append(html);
          $('.basket_content').css("height", "auto");
          var item_add = null;
        }
      });
      return false;          
    };

不要认为问题出在被调用的 PHP 文件上。

干杯

4

4 回答 4

4

假设#add_123456按钮是一个submit按钮,问题是因为您submit()在每次单击按钮时向表单添加一个新的处理程序。相反,您只需要添加一次提交处理程序并在单击按钮时在表单上引发事件。尝试这个:

$('#basket_1').submit(function (event) {
    event.preventDefault();
    basket_add("feqf73nbdw7","123456","XYZ123","1","0.1","19.23");            
});  

$("#add_123456").click(function () {  
    $("#add_123456").addClass('added');          
    var quantity = $("#qty_123456").val();
    $('#basket_1').submit();
});

但是,如果您只是通过 AJAX 提交,则可以完全消除提交表单的需要,如下所示:

$("#add_123456").click(function () {  
    $("#add_123456").addClass('added');          
    var quantity = $("#qty_123456").val();
    basket_add("feqf73nbdw7","123456","XYZ123","1","0.1","19.23");            
});
于 2012-10-09T08:31:58.993 回答
2

因为每次点击都会运行#add_123456代码,里面会添加一个回调函数,你可能要先绑定回调,然后触发when 。$('#basket_1').submit(function (event) {...})$('#basket_1').submitsubmitclick

就像是:

   $('#basket_1').submit(function (event) {
      event.preventDefault();
      basket_add("feqf73nbdw7","123456","XYZ123","1","0.1","19.23");            
   });  

   $("#add_123456").click(function () {  
      $("#add_123456").addClass('added');          
      var quantity = $("#qty_123456").val(); 
      $('#basket_1').trigger('submit');   
    });
于 2012-10-09T08:33:29.817 回答
1

该问题可能由提交侦听器创建。每次点击都会添加一个新的。也许你应该让你的提交列表器分开做类似的事情:

 $("#add_123456").click(function () {  
  $("#add_123456").addClass('added');          
  var quantity = $("#qty_123456").val();

});

 $('#basket_1').submit(function (event) {
    event.preventDefault();
    basket_add("feqf73nbdw7","123456","XYZ123","1","0.1","19.23");            
  }); 

另一种解决方案是在绑定之前取消绑定监听器:

$("#add_123456").click(function () {  
  $("#add_123456").addClass('added');          
  var quantity = $("#qty_123456").val();
  $('#basket_1').unbind( 'submit' ).bind( 'submit', function (event) {
    event.preventDefault();
    basket_add("feqf73nbdw7","123456","XYZ123","1","0.1","19.23");            
  });      
});
于 2012-10-09T08:33:16.730 回答
0

每次单击按钮时,您都会附加另一个事件处理程序。在 onclick 处理程序之外附加 onsubmit 处理程序,或使用

  $('#basket_1').off('submit').on('submit',(function (event) {
    event.preventDefault();
    basket_add("feqf73nbdw7","123456","XYZ123","1","0.1","19.23");            
  }); 
于 2012-10-09T08:36:54.013 回答