Ajax呼び出しを行うチェックボックスにjQuery変更イベントがあり、チェックボックスが属するテーブル行を強調表示します。Ajax呼び出しでエラーが報告されたときに問題が発生しました。この場合、チェックボックスのクリックを元に戻したいと思います(これを使用that.prop("checked", !that.prop("checked"))
しています)。ただし、何が起こっているのかというと、変更イベントを呼び出すという無限ループに入ります。ご覧のとおり、この動作を停止するために、ajaxInProgressという変数を設定しようとしましたが、期待どおりに機能していないようです。誰かが別のアプローチを提供したり、バグを見つけたりできますか?チェックボックスをリセットする方法が必要かどうかわかりません-チェックボックスをリセットしても、変更イベントが開始されないようにすることは可能ですか?
var ajaxInProgress = false; //add this to stop recursive calls when errors occur
jQuery(document).ready(function() {
jQuery(".cc").change(function (e) {
if (ajaxInProgress) return;
var mode = "remove"
if (jQuery(this).attr("checked")) {
mode = "add"
}
//grab the application ID from the checkbox ID
var thisApp = this.id.substr(3);
var that = jQuery(this);
ajaxInProgress = true;
jQuery.get("/particular/edit-ajax", { application_id: thisApp,
party_id: 1920,
party_rel_id: 21,
mode: mode} , function(response) {
if (response == 0) {
that.closest('tr').removeClass('even').removeClass('odd').addClass('highlight');//highlight the tr
} else {
e.preventDefault();
that.prop("checked", !that.prop("checked")); //reset the checkbox if there was an error
alert("Please contact support - couldn't update database for application "+thisApp+". Response was: "+response);
}
});
ajaxInProgress = false;
});
});