У меня есть два действия, которые обрабатываются Ajax: одно - удалить, а другое - отменить удаление.
при нажатии кнопки удалить удалить элемент и показать кнопку отмены удаления, но попробуйте нажать кнопку отмены удаления (без действий), и консоль ничего не скажет
Я проверил кнопку отмены-удаления после действия удаления, в котором нет Event listener, после обновления страницы появляется Event listener и начинает работать нормально.
Вот код PHP.
@foreach($productCategories as $productCategory)
<tr class = "item{{ $productCategory->id }}">
<td><strong>{!! $productCategory->name !!}</strong></td>
<td class = "text-center">
<button class = "edit-modal btn btn-info" data-id = "{{ $productCategory->id }}"
data-name-ar = "{{ $productCategory->translate('ar')->name }}"
data-name-en = "{{ $productCategory->translate('en')->name }}">
<span class = "fa fa-pencil-square-o"></span> Edit
</button>
@if ($productCategory->soft_delete == 0)
<button class = "delete-modal btn btn-danger"
data-id = "{{ $productCategory->id }}"
data-name-ar = "{{ $productCategory->translate('ar')->name }}"
data-name-en = "{{ $productCategory->translate('en')->name }}">
<span class = "fa fa-trash"></span> Delete
</button>
@else
<button class = "btn btn-warning undo-delete"
id = "{{ $productCategory->id }}"
data-name-ar = "{{ $productCategory->translate('ar')->name }}"
data-name-en = "{{ $productCategory->translate('en')->name }}">
<span class = "fa fa-undo"></span> Undo Delete
</button>
@endif
</td>
</tr>
@endforeach
и вот действие для удаления
/ Действие при нажатии кнопки удаления /
$('.modal-footer').on('click', '.delete', function () {
$.ajax({
url: 'delete-product-category',
type: 'post',
data: {
'_token': $('input[name=_token]').val(),
'id': $('.category-id').text(),
'soft_delete': 1
},
success: function (data) {
let arabic_name = data.translations[0].name;
let english_name = data.translations[1].name;
$('.item' + data.id).replaceWith("<tr class='item" + data.id + "'><td><strong>" + arabic_name + "</strong></td><td class='text-center'><button class='edit-modal btn btn-info' data-id='" + data.id + "' data-name-ar='" + arabic_name + "' data-name-en='" + english_name + "'><span class='fa fa-pencil-square-o'></span> Edit</button> <button class='btn btn-warning undo-delete' id='" + data.id + "' data-name-ar='" + arabic_name + "' data-name-en='" + english_name + "'><span class='fa fa-undo'></span> Undo Delete</button></td></tr>");
},
});
});
и действие для отмены удаления
/ Действие на кнопку отмены-удаления /
$('.undo-delete').on('click', function () {
$.ajax({
url: 'undo-delete-product-category',
type: 'post',
data: {
'_token': $('input[name=_token]').val(),
'id': $(this).attr('id'),
'soft_delete': 0
},
success: function (data) {
let arabic_name = data.translations[0].name;
let english_name = data.translations[1].name;
$('.item' + data.id).replaceWith("<tr class='item" + data.id + "'><td><strong>" + arabic_name + "</strong></td><td class='text-center'><button class='edit-modal btn btn-info' data-id='" + data.id + "' data-name-ar='" + arabic_name + "' data-name-en='" + english_name + "'><span class='fa fa-pencil-square-o'></span> Edit</button> <button class='delete-modal btn btn-danger' data-id='" + data.id + "' data-name-ar='" + arabic_name + "' data-name-en='" + english_name + "'><span class='fa fa-trash'></span> Delete</button></td></tr>");
},
});
});
@RoryMcCrossan Спасибо за быстрый ответ, но мне нужно это понять, так как я новичок в Ajax, вы имеете в виду delegated, как удалить, как $('.undo-delete').on('click', '.undo-delete', function () {, это правильно?
$('.modal-footer').on('click', '.undo-delete', function () {Ага, но .modal-footer больше нет, когда появляется модальное окно delete, и в нем есть .modal-footer, но при отмене удаления нет .modal-footer.
Затем используйте статического родителя более высокого уровня.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вам необходимо использовать делегированный обработчик событий на
.undo-delete, точно так же, как вы уже делаете это для.delete.