我有一个非常简单的功能,如下所示。这会在确认这是他们想要做的事情后删除用户单据(注意 custom confirm
)。在确认的回调函数中,id
第一次设置正确,但之后永远不会更新。
如果我console.log
在deleteSlip
函数里面,id
总是正确的。如果我console.log
在回调内部,它总是id
我第一个发送它。当我调试 javascript 时,我看到了同样的事情。该值第一次是正确的,但之后永远不会更新。
我需要做什么才能让回调函数中的值在更新时更新deleteSlip
?
function deleteSlip(id){
// id is correct right here
confirm('This will delete your slip. Are you sure you want to do this?', function(confirmed){
// id here is always the first value from deleteSlip, and never changes
if (confirmed)
{
// do stuff
}
});
}
被调用是自定义的confirm
,定义如下:
window._originalConfirm = window.confirm;
window.confirm = function(text, cb) {
bootStrapConfirm = function() {
if(! $.fn.modal.Constructor)
return false;
if($('#windowConfirmModal').length == 1)
return true;
$('body').append(' \
<div id="windowConfirmModal" class="modal hide fade" tabindex="-1" role="dialog" aria-hidden="true"> \
<div class="modal-body"> \
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> \
<p> alert text </p> \
</div> \
<div class="modal-footer"> \
<button class="btn btn-danger" data-dismiss="modal" aria-hidden="true">No</button> \
<button class="btn btn-primary" data-dismiss="modal" aria-hidden="true">Yes</button> \
</div> \
</div> \
');
function unbind() {
$("#windowConfirmModal .btn-primary").unbind('click', confirm);
$("#windowConfirmModal .btn-danger").unbind('click', deny);
}
function confirm() { cb(true); delete cb;}
function deny() { cb(false); delete cb;}
$("#windowConfirmModal .btn-primary").bind('click', confirm);
$("#windowConfirmModal .btn-danger").bind('click', deny);
return true;
}
if ( bootStrapConfirm() ){
$('#windowConfirmModal .modal-body p').text(text);
$('#windowConfirmModal').modal();
} else {
console.log('bootstrap was not found');
window._originalConfirm(text);
}
}
deleteSlip
是onclick
按钮上的 HTML 属性。像这样:
onclick="deleteSlip(1234)"
再次重申,id
内部deleteSlip
是正确的。id
回调的内部confirm
是它首先得到的,并且永远不会改变。回调可能是异步的,但我在任何给定时间只调用一次。 deleteSlip
在按钮单击时触发。
我之前发布了这个问题,并被告知它太模棱两可了。请让我知道你需要看到什么来帮助我解决这个问题。“do stuff”区域有一个 ajax 调用,但在此之前的值是错误的(因此不向没有阅读整个问题的人显示它)。
更新:看起来这是自定义的问题confirm
。我将自定义更改confirm
为以下内容:
window.confirm = function(text, cb) {
bootStrapConfirm = function() {
if(! $.fn.modal.Constructor)
return false;
if($('#windowConfirmModal').length == 1)
return true;
$('body').append(' \
<div id="windowConfirmModal" class="modal hide fade" tabindex="-1" role="dialog" aria-hidden="true"> \
<div class="modal-body"> \
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> \
<p> alert text </p> \
</div> \
<div class="modal-footer"> \
<button class="btn btn-danger" data-dismiss="modal" aria-hidden="true">No</button> \
<button class="btn btn-primary" data-dismiss="modal" aria-hidden="true">Yes</button> \
</div> \
</div> \
');
return true;
}
if ( bootStrapConfirm() ){
function confirm() { cb(true); }
function deny() { cb(false); }
$("#windowConfirmModal .btn-primary").unbind('click', confirm);
$("#windowConfirmModal .btn-danger").unbind('click', deny);
$("#windowConfirmModal .btn-primary").bind('click', confirm);
$("#windowConfirmModal .btn-danger").bind('click', deny);
$('#windowConfirmModal .modal-body p').text(text);
$('#windowConfirmModal').modal();
} else {
console.log('bootstrap was not found');
window._originalConfirm(text);
}
}
现在,当confirm
被调用时,它会调用id
它所见过的所有 's。我不unbind
正确的东西?