Datatable 正在阻止除第 1 页之外的其他页面上的按钮单击事件
Datatable is blocking events for button click on other pages except page 1
我有一个包含我网站中所有类别的数据表。有一个功能可以删除 AJAX 的类别,同时选择一个类别以将产品(在我的例子中是网站)移动到另一个类别。以下是我的做法:
$(".delete_category_instant").on('click', function(event) {
$(this).hide();
$(this).closest("td").find(".editCategory").hide();
$(this).closest("td").find(".selectCategoryToMove").removeClass("d-none");
});
$(".selectCategoryToMove").find(".submitSelection").on('click', function(event){
$(this).closest("td").find(".selectCategoryToMove").addClass("d-none");
$(this).closest("td").find(".confirmAction").removeClass("d-none");
Toast.fire({
icon: 'warning',
title: 'Please confirm your action!'
});
});
$(".confirmActionYes").on('click', function(event) {
var cat_id = $(this).attr('category-id');
var move_cat_id = $(this).closest("td").find("select").val();
$this = $(this);
$.ajax({
type: 'GET',
url: '{{ url("administrator/delete/category/") }}',
data: {
id: cat_id,
move_id: move_cat_id
},
success: function(response) {
if(response.status == 1) {
Toast.fire({
icon: 'success',
title: 'Category deleted successfully!'
});
$this.parents('tr').remove();
} else if(response.status == 2) {
Toast.fire({
icon: 'warning',
title: 'You are not allowed to do this action!'
});
} else {
Toast.fire({
icon: 'error',
title: 'Could not delete this category!<br/>Please try again later!'
});
}
},
error: function(xhr, ajaxOptions, thrownError) {
console.log(xhr.status);
console.log(thrownError);
}
});
});
$(".confirmActionNo").on('click', function(event) {
$(this).parent().addClass("d-none");
$(this).parent().closest("td").find(".delete_category_instant").show();
$(this).parent().closest("td").find(".editCategory").show();
});
但这仅适用于数据表中的第 1 页。在其他页面内,该按钮甚至在点击时没有响应。解决办法是什么?这是我以后需要注意的常见问题吗?
您的事件处理程序可能没有连接到新元素,因为设置它们的代码仅在页面加载时运行一次。无法从您的示例中看出,但如果是这种情况,您可以改用委托的侦听器:
例如:
$(".confirmActionYes").on('click', function() {...})
变成
$(document).on('click', '.confirmActionYes', function () {...})
我有一个包含我网站中所有类别的数据表。有一个功能可以删除 AJAX 的类别,同时选择一个类别以将产品(在我的例子中是网站)移动到另一个类别。以下是我的做法:
$(".delete_category_instant").on('click', function(event) {
$(this).hide();
$(this).closest("td").find(".editCategory").hide();
$(this).closest("td").find(".selectCategoryToMove").removeClass("d-none");
});
$(".selectCategoryToMove").find(".submitSelection").on('click', function(event){
$(this).closest("td").find(".selectCategoryToMove").addClass("d-none");
$(this).closest("td").find(".confirmAction").removeClass("d-none");
Toast.fire({
icon: 'warning',
title: 'Please confirm your action!'
});
});
$(".confirmActionYes").on('click', function(event) {
var cat_id = $(this).attr('category-id');
var move_cat_id = $(this).closest("td").find("select").val();
$this = $(this);
$.ajax({
type: 'GET',
url: '{{ url("administrator/delete/category/") }}',
data: {
id: cat_id,
move_id: move_cat_id
},
success: function(response) {
if(response.status == 1) {
Toast.fire({
icon: 'success',
title: 'Category deleted successfully!'
});
$this.parents('tr').remove();
} else if(response.status == 2) {
Toast.fire({
icon: 'warning',
title: 'You are not allowed to do this action!'
});
} else {
Toast.fire({
icon: 'error',
title: 'Could not delete this category!<br/>Please try again later!'
});
}
},
error: function(xhr, ajaxOptions, thrownError) {
console.log(xhr.status);
console.log(thrownError);
}
});
});
$(".confirmActionNo").on('click', function(event) {
$(this).parent().addClass("d-none");
$(this).parent().closest("td").find(".delete_category_instant").show();
$(this).parent().closest("td").find(".editCategory").show();
});
但这仅适用于数据表中的第 1 页。在其他页面内,该按钮甚至在点击时没有响应。解决办法是什么?这是我以后需要注意的常见问题吗?
您的事件处理程序可能没有连接到新元素,因为设置它们的代码仅在页面加载时运行一次。无法从您的示例中看出,但如果是这种情况,您可以改用委托的侦听器:
例如:
$(".confirmActionYes").on('click', function() {...})
变成
$(document).on('click', '.confirmActionYes', function () {...})