作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我设计了一个简单的模式,其工作方式与用户尝试删除任何实体时的 JavaScript 确认类似。当用户单击“删除”图标时,在该图标的单击事件上将启动以下模式。
如果用户单击"is",则会发送 ajax 请求来删除该项目。当第一个 ajax 请求发送时它工作得很好。但是,当用户尝试再次执行相同的操作时,它会发送两个请求,依此类推以进行下一次尝试。我不知道出了什么问题。
这是我的“删除图标”的 HTML:
<a href="javascript:void(0)" class="btn btn-default">
<?php echo $item_name . " "; ?>
<i class="fa fa-times delete_item" data-url="<?php echo $url; ?>" data-item_id="<?php echo $item['id']; ?>" ></i></a>
对于模态:
<div class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-body">
<h5 style="text-align:center;">Do you want to delete this item?</h5>
<br />
<div>
<button type="button" class="btn btn-danger pull-right confirm_delete">Yes</button>
<button type="button" class="btn btn-default pull-right" data-dismiss="modal">No</button>
</div>
<br />
</div>
</div>
</div>
这是我的 JavaScript:
$('body').on('click', '.delete_item', function(e){
e.preventDefault();
var url = $(this).data('url');
var data = 'item_id=' + $(this).data('item_id');
var btn = $(this);
$(btn).parents('form').children('.modal').modal('show');
$('.modal-body').on('click', '.confirm_delete', function(e){
e.preventDefault();
var confirm = $(this);
$.ajax({
type: 'post',
url: url,
data: data,
dataType: 'json',
cache: false,
success: function(data){
if(data.status)
{
$(btn).parent('.btn').remove();
}
else
{
alert('error');
}
},
complete: function(){
$(confirm).parents('.modal').modal('hide');
}
});
});
});
最佳答案
这是因为单击第二个删除按钮时注册了多个单击事件处理程序。
使用 off()
作为一个解决方案删除以前的处理程序
$('body').on('click', '.delete_item', function (e) {
e.preventDefault();
var url = $(this).data('url');
var data = 'item_id=' + $(this).data('item_id');
var btn = $(this);
$(btn).parents('form').children('.modal').modal('show');
$('.modal-body').off('click.confirm').on('click.confirm', '.confirm_delete', function (e) {
e.preventDefault();
var confirm = $(this);
$.ajax({
type: 'post',
url: url,
data: data,
dataType: 'json',
cache: false,
success: function (data) {
if (data.status) {
$(btn).parent('.btn').remove();
} else {
alert('error');
}
},
complete: function () {
$(confirm).parents('.modal').modal('hide');
}
});
});
});
关于jquery - 使用 jQuery 和 Ajax 启动 Bootstrap Modal 后,单击事件处理程序会多次发生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21251075/
我是一名优秀的程序员,十分优秀!