Javascript 事件链接如何适用于多个对象?
当用户单击twitter引导模式窗口按钮上的确认按钮时,我正在对页面执行删除操作 我有两个按钮:一个允许用户取消操作,另一个用于确认 当用户单击确认删除按钮时,当模式隐藏时,我执行我的操作,例如,我可以显示动画并实际删除项目 如果用户单击了几个项目,但他/她选择的是“取消”按钮,则当他/她单击他/她要删除的项目时,也会对要取消选择的元素执行删除 执行“隐藏”事件后,是否应将其与元素分离 我知道我可以分离事件链接,更改Javascript 事件链接如何适用于多个对象?,javascript,jquery,twitter-bootstrap,jquery-events,Javascript,Jquery,Twitter Bootstrap,Jquery Events,当用户单击twitter引导模式窗口按钮上的确认按钮时,我正在对页面执行删除操作 我有两个按钮:一个允许用户取消操作,另一个用于确认 当用户单击确认删除按钮时,当模式隐藏时,我执行我的操作,例如,我可以显示动画并实际删除项目 如果用户单击了几个项目,但他/她选择的是“取消”按钮,则当他/她单击他/她要删除的项目时,也会对要取消选择的元素执行删除 执行“隐藏”事件后,是否应将其与元素分离 我知道我可以分离事件链接,更改$('confirmDeleteModal')。打开('hidden',func
$('confirmDeleteModal')。打开('hidden',function(){
到$('confirmDeleteModal')。关闭('hidden')。打开('hidden',function(){
),但我真的会理解为什么会发生这种情况。我遗漏了什么吗
代码是:
$(document).ready(function(){
$('.delete').on('click', function() {
var itemID = $(this).data('product-id')
$('#confirmDeleteModal').modal('show');
$('#confirmDelete').on('click', function() {
$('#confirmDeleteModal').on('hidden', function() {
// Here I do my stuff to perform deletion
$('#result').append('This method has been called for ' + itemID + ' <br />' )
});
});
});
});
$(文档).ready(函数(){
$('.delete')。在('click',function()上{
var itemID=$(this.data('product-id'))
$('confirmDeleteModal').modal('show');
$('confirmDelete')。在('click',function()上{
$('confirmDeleteModal')。on('hidden',function(){
//在这里,我做我的东西来执行删除
$(“#result”).append(“+itemID+”
调用了此方法)
});
});
});
});
我希望我已经清楚地暴露了我的问题。我还准备了一个JS Bin:这里的问题是,您每次都在
单击和隐藏的事件中附加其他侦听器。要解决这个问题,请在调用打开('eventName')之前,将jQuery.off('eventName')
方法链接起来
请再说一遍
以下是您在JS Bin中更新并运行良好的代码:
$(document).ready(function(){
$('.delete').on('click', function() {
var itemID = $(this).data('product-id')
$('#confirmDeleteModal').modal('show');
$('#confirmDeleteModal').off('hidden'); // must reset from previous
$('#confirmDelete').off('click').on('click', function() {
$('#confirmDeleteModal').on('hidden', function() {
// Here I do my stuff to perform deletion
$('#result').append('This method has been called for ' + itemID + ' <br />' )
});
});
});
});
$(文档).ready(函数(){
$('.delete')。在('click',function()上{
var itemID=$(this.data('product-id'))
$('confirmDeleteModal').modal('show');
$('confirmDeleteModal').off('hidden');//必须从上一个
$('confirmDelete')。关闭('click')。打开('click',函数(){
$('confirmDeleteModal')。on('hidden',function(){
//在这里,我做我的东西来执行删除
$(“#result”).append(“+itemID+”
调用了此方法)
});
});
});
});
编辑:我将$('confirmDeleteModal').off('hidden')移动
单击事件上方,以便重置是否单击了确认。不确定您在问什么,但是的,您应该分离事件,或者至少不要像那样嵌套事件附件。我想知道为什么会发生这种情况:一旦“隐藏”事件完成,为什么会再次触发?既然您说我应该我不会那样嵌套事件,有更好的方法吗?我已经尝试过了,但看起来似乎不起作用。我仍然会有同样的行为。我想这是因为当你分离隐藏的事件时,事件本身还没有排队。嗯……看看我做的。这不是你想要的吗?我明白了……我错过了关闭(‘单击’)按钮本身。这也很奇怪……因为我只按了一次按钮,它怎么会附加其他事件?当对话框窗口关闭时,它实际上不会删除对话框或按钮;它只是隐藏它们。因此,当你附加另一个事件句柄时,你将它附加到同一个按钮上。很高兴它工作了!