我遇到了回调函数的问题。我有这个功能来显示一条警告消息,它有一个回调(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;这意味着它运行以前的回调函数。为什么会这样?我该如何防止这种情况发生?
谢谢。
答案 0 :(得分:2)
我假设您在页面中没有多次相同的ID,这是您在打开新对话框之前关闭的第一个对话框。
您可以使用off
取消绑定,但此处没有理由使用委派。一个简单的解决方案是绑定到新添加的元素而不是整个文档。这样,绑定将被元素删除。
替换
$(document).on('click','#modal-alert-close'
与
$('#modal-alert-close').on('click',