jquery - 单击取消按钮时如何避免多次删除
问题描述
我有一个记录列表,每行都有一个红十字以删除该记录。删除工作正常,但我注意到确认模式中有一些不需要的行为
当我点击一个红十字以删除记录 ID 1 并且我改变主意时,我点击了取消按钮。但是当我想删除记录 2 并单击确认按钮时,记录 1 和 2 都被删除,但我只想删除记录 2。
有什么想法可以防止我在之前单击模式中“取消”按钮上的确认按钮之前删除 2 条记录?
$(document).on("click", ".delete_item", function(e) {
e.preventDefault();
var user_id = $(this).attr('data-user_id');
var text_modal = "Are you sure?";
$('.modal-body').text(text_modal);
$('#modal-delete').modal('show');
$('.confirmation').on('click', function() {
$.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();
}
});
});
$('.cancellation').on('click', function() {
// Something to prevent double deleting
});
});
解决方案
问题是因为您正在嵌套事件处理程序。这意味着尽管您取消了第一次删除的模式,但事件仍然绑定到它。因此,下次您删除一行时,所有以前打开的模式也会删除它们的相关行。
要解决此问题,请使用单独的委托事件处理程序。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 调用的整个要点都是多余的。我建议不要这样做。
推荐阅读
- r - 如何在不拆分列的情况下合并 data.tables 列表?
- bash - 尝试使用 wget 下载带零的图像
- postman - 无论值如何,针对字符串的测试都会通过
- grouping - 在 Tableau 中对维度进行分组,但保留未分组的数据
- java - 试图计算员工年龄(期间)与他们被雇用的日期(LocalDate)之间的日期。如何解决数据类型不匹配的问题?
- sql - PostgreSQL - Format() 命名参数?
- javascript - 如何创建一个 HTML 元素并在其中设置一些东西?
- java - 在 java 接口声明中使用模板参数
- asp.net-core - 如何在 Asp.Net Core 2.1 应用程序中创建部分视图登录和注册
- python - 在 Python 对象列表中创建列表和求和属性