Javascript 在另一个函数中作为参数传递的函数正在被乘法激发
我有一个功能,可以创建一个带有“确认”和“取消”按钮的模式窗口。该函数需要一个Javascript 在另一个函数中作为参数传递的函数正在被乘法激发,javascript,jquery,callback,Javascript,Jquery,Callback,我有一个功能,可以创建一个带有“确认”和“取消”按钮的模式窗口。该函数需要一个操作参数,通过该参数调用另一个函数。在本例中,此操作是取消订阅AJAX调用 只有在单击“确认”之后,才会进行AJAX调用 这就是奇怪的事情发生的时候。第一次之后,每次我再次单击“确认”按钮时,它都会再次触发该操作。因此,它第一次只触发一次动作,第二次触发两次,第三次触发三次。等等 我为这件事挠头已有一段时间了。似乎action参数保持了它的功能,并且每个新输入的action都被添加到该参数之上 $.createActi
操作
参数,通过该参数调用另一个函数。在本例中,此操作
是取消订阅AJAX调用
只有在单击“确认”之后,才会进行AJAX调用
这就是奇怪的事情发生的时候。第一次之后,每次我再次单击“确认”按钮时,它都会再次触发该操作。因此,它第一次只触发一次动作,第二次触发两次,第三次触发三次。等等
我为这件事挠头已有一段时间了。似乎action
参数保持了它的功能,并且每个新输入的action
都被添加到该参数之上
$.createActionModal = function( params, action ) {
if ( typeof params.title === 'undefined' ) { params.title= ''; }
var actionModal = $( '#action-modal' );
actionModal.find( '.modal-title' ).html( params.title );
actionModal.show();
actionModal.on( 'click', '.confirm-button', function( e ) {
e.preventDefault();
// Fire the action if "Confirm" is clicked
action();
actionModal.hide();
return true;
} );
actionModal.on( 'click', '.cancel-button', function( e ) {
e.preventDefault();
actionModal.hide();
return false;
} );
}
然后在另一个文件中,我使用这个函数显示一个模式窗口,其中有两个选项,确认和取消
$(document).on( 'click', '.unsubscribe-button', function( e ) {
e.preventDefault();
var thisButton = $(this);
var data = {
'action': 'unsubscribe',
'author_id': parseInt( thisButton.attr( 'data-author-id' ) ),
};
// Modal function is called here, the action paramater is a function wrapping the AJAX function
$.createActionModal(
{
'title': 'Are you sure you want to unsubscribe?'
},
function() {
subscription_ajax( thisButton, data );
}
);
});
最后是作为操作传递的AJAX调用
var subscription_ajax = function( thisButton, data ) {
$.ajax({
url: ajax_url,
type: 'POST',
data: data,
success: function( response ) {
console.log( 'Testing' );
// ... Does ajax stuff
}
});
}
看起来,每次单击$('.unsubscribe button'),都会再次调用$.createActionModal(),将新的事件侦听器附加到其按钮上(而旧的仍然存在)
创建模态并附加侦听器一次,然后在按钮上单击“仅显示它”。您是否尝试过以下方法:?另外,您可能需要考虑一个具有多个选择器的单击方法。我通过添加<代码> ActoMadio.Of()来解决这个问题;代码>就在它隐藏在$.createActionModal
函数中之后。不确定这是否是最好的方法,但它是有效的。如果你能更新你的答案与代码的例子,你的意思,将不胜感激,我可以批准这个答案!