1

PHPファイルにajaxリクエストを送信し、バスケットに商品を追加する関数を作成しました。この関数は、最初のクリックでは正常に機能しますが、その後のクリックごとに関数が再度実行されます。たとえば、2回目のクリックで関数を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()ハンドラーを追加するためです。代わりに、送信ハンドラーを1回追加し、ボタンをクリックするとフォームでイベントを発生させるだけで済みます。これを試して:

$('#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にコード$('#basket_1').submit(function (event) {...})が実行され、コールバック関数がに追加されるため$('#basket_1').submit、最初にコールバックをバインドし、のsubmitときにトリガーすることをお勧めしますclick

何かのようなもの:

   $('#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 に答える