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
函数中之后。不确定这是否是最好的方法,但它是有效的。如果你能更新你的答案与代码的例子,你的意思,将不胜感激,我可以批准这个答案!