Проблема в том, что вы вкладываете обработчики событий. Это означает, что, хотя вы отменяете модальность для первого удаления, события все равно привязаны к нему. Следовательно, в следующий раз, когда вы удалите строку, все ранее открытые модалы также будут удалять связанные строки.
Чтобы исправить это, используйте отдельные делегированные обработчики событий. Вы можете связать их со строками, используя атрибуты data
, например:
$(document).on("click", ".delete_item", function(e) {
e.preventDefault();
var user_id = $(this).data('user_id');
$('.confirmation, .cancellation').data('user_id', user_id);
$('.modal-body').text("Are you sure?");
$('#modal-delete').modal('show');
});
$(document).on("click", '.confirmation', function() {
let user_id = $(this).data('user_id');
$.ajax({
type: 'GET',
url: 'delete.php',
data: { user_id: user_id },
success: function(html) { // Removing entire row
$('.ui-sortable li[data-itemid="' + user_id + '"]').remove();
location.reload();
}
});
});
$(document).on("click", '.cancellation', function() {
let user_id = $(this).data('user_id');
// do something...
});
Здесь следует отметить еще несколько моментов. Сначала используйте data()
, чтобы получить / установить data
атрибутов, а не attr()
. Во-вторых, для вызова delete.php
более разумно использовать глагол DELETE HTTP. И наконец, если вы собираетесь позвонить location.reload()
после вызова AJAX, то весь смысл вызова AJAX является избыточным. Я бы предложил не делать этого.