覆盖JQuery以前的回调函数

时间:2014-06-03 08:07:57

标签: javascript jquery callback

我遇到了回调函数的问题。我有这个功能来显示一条警告消息,它有一个回调(okcallback),如果提供它将被执行:

function ErrorAlert(msg,okcallback) {

    ISAPP.ui.loader_modal_header.html('<h4 class="modal-title">'+ label.alertLabel +'</h4>');
    ISAPP.ui.loader_modal_body.html(msg);
    ISAPP.ui.loader_modal_footer.html('<div class="clearfix ">' +
              '<a id="modal-alert-close" class="btn green pull-right">' +
                '<label>'+ label.acceptLabel +'</label>' +
                ' <i class="fa fa-check-circle"></i>' +
              '</a>' + 
            '</div>');
    ISAPP.ui.loader_modal_header.show();
    ISAPP.ui.loader_modal_body.show();
    ISAPP.ui.loader_modal_footer.show();
    ISAPP.ui.loader_modal.modal('show');

    $(document).on('click','#modal-alert-close',
            function(){
                ISAPP.ui.loader_modal_footer.html('');
                ISAPP.ui.loader_modal.modal('hide');
                if(okcallback){
                    okcallback();
                }
            }
    );      
}

当我在第一次执行函数时使用回调或没有回调时它工作正常。但是当它第二次执行时,无论前一次执行的回调是什么,都会延续到第二次执行,即使第二次执行没有回调函数。

示例:
第一次执行(关闭消息后将变为空白)

ErrorAlert("Pincode has been sent to " + email,
            function(){
                location.href = "#/blank";  
            }
    );

第二次执行(关闭消息后不应该做任何事情)

ErrorAlert("Username is mandatory");

但是发生了什么,功能仍然是#34;#/ blank&#34;这意味着它运行以前的回调函数。为什么会这样?我该如何防止这种情况发生?

谢谢。

1 个答案:

答案 0 :(得分:2)

我假设您在页面中没有多次相同的ID,这是您在打开新对话框之前关闭的第一个对话框。

您可以使用off取消绑定,但此处没有理由使用委派。一个简单的解决方案是绑定到新添加的元素而不是整个文档。这样,绑定将被元素删除。

替换

$(document).on('click','#modal-alert-close'

$('#modal-alert-close').on('click',