2017-12-19 11 views
0

私のアプリケーションでは、各サプライヤの前にあるチェックボックスと一緒にサプライヤを一覧表示するjQueryポップアップウィンドウがあります。ユーザーは各サプライヤのチェックボックスの1つをチェックし、削除ボタンを押すとサプライヤを削除することができます。ただし、ユーザーが削除ボタンをクリックすると、Ajaxコールはサーバー側に正しく送信され、サーバー側で適切にサプライヤーを削除します(削除されたサプライヤーはリストに表示されなくなります)。ユーザーが同じことをやり直すと、ポップアップウィンドウが2つのajaxリクエストをサーバー側に送信することに気付きました。ユーザが3回目にクリックすると、ポップアップウィンドウはajaxリクエストを3回送信します。ユーザーがポップアップフォームを送信すると、複数のajaxコールが送信されます

var ajaxURL = getFormAction('crm.web.SupplierManager', 
'deleteSupplierRequestAjax'); 
$("#deleteBtnId").click(function(event) { 
    $("#supplierDeleteConfirmDivId").dialog("open"); 
    $("#supplierPopupCancelBtnId").click(function(event) { 
    $("#supplierDeleteConfirmDivId").dialog("close"); 
    event.preventDefault(); 
}); 
$("#supplierPopupOkBtnId").click(function(event) { 
    $("#supplierDeleteConfirmDivId").dialog("close"); 
     $("#supplierPopupOkBtnId").mask("Waiting..."); 
     $.ajax({ 
      type: 'POST', 
      data: $("#formId").serialize(), 
      url: ajaxURL, 
      success: function (data) { 
       $("#supplierPopupOkBtnId").html(data); 
       $("#supplierPopupOkBtnId").unmask(); 
      }, 
      error: function(jQXHR, textStatus, errorThrown) { 
       $("#supplierPopupOkBtnId").unmask(); 
       handleAjaxError(jQXHR, textStatus, errorThrown); 
      } 
     }); 
    }); 
event.preventDefault(); 
}); 

私にとって、ユーザーが削除ボタンをクリックするたびに、ポップアップウィンドウにレンダリングが蓄積されているようです。本当の理由はわかりません。私は$("#formId").serialize()が問題を起こしていると推測しています。誰もが別の考えがありますか?で

+0

async:false、 –

+1

を使用してみることができます。非同期:falseを使用しないでください。非推奨です。非同期コードが必要な場合は、「約束」を参照してください。 – Zenoo

+0

ありがとう@Zenooこれはどうやって起こっているのですか? – nwGCham

答えて

1

:あなたはたびにボタンの新しいリスナーを作成している

$("#supplierPopupCancelBtnId").click(function(event){}) 

が、これは累積的です。

"1" としてみてください:

$("#supplierPopupCancelBtnId").one("click", function() {}); 

jQueryのドキュメントから:

「.one()メソッドは、指定された要素およびイベントのハンドラことを除いて、)(.onと同じですタイプは、最初の呼び出しの後にバインドされていません。

+0

あなたの提案を適用しました。はい。それで合っています。正しく動作しています。ありがとうございました..!!! – nwGCham

+0

あなたは大歓迎です:) –

関連する問題