我决定使用Alertify修改和设置样式。我的旧代码:
<script type="text/javascript">
$('.ask').click(function(){
var answer = confirm('<?php echo $this->translate('Delete route?'); ?>');
return answer;
});
当我按OK时,将运行一个php脚本并删除该记录。 Javascript返回true或false。
我与Alertify的问题是我什至无法按OK或取消,我的PHP脚本在此之前运行。这是代码:
$(".ask").click(function(event){
alertify.confirm("Are you sure you want to commit your reservation?", function (e) {
if (e) {
return true;
} else {
return false;
}
});
});
我看到有些人遇到类似的问题,并且看到需要使用阻止默认值(这很有意义)代码:
$(".ask").click(function(event){
event.preventDefault(); // cancel submit
alertify.confirm("Are you sure you want to commit your reservation?", function (e) {
if (e) {
return true; // submit form skipping jQuery bound handler
} else {
}
});
});
在那种情况下,php脚本不会在我按ok/cancel之前运行,但在我按按钮之一时也不会运行。没发生什么事。
有什么帮助吗?
最佳答案
您正在遇到JavaScript的异步特性。在原始代码中,打开confirm
对话框时,所有JavaScript的执行都将暂停,因此您可以直接使用其中的返回值。但是,当您使用alertify.confirm
时,它不会暂停脚本的执行,因此单击处理程序将立即返回,并且围绕该处理程序的所有代码也将运行-即调用您的php脚本的代码。当您尝试从return true;
回调函数内部进行alertify.confirm
时,您是从该内部函数返回到alertify
代码,而不是从外部单击处理程序函数中返回。
您需要做的是开始使用可用的回调方法,而不是反对回调方法-我建议按以下方式重组您的代码。在确认.ask
是a
标记之后,以下方法应该起作用:
$(".ask").click(function(event){
var loc = $(this).attr('href');
alertify.confirm("Are you sure you want to commit your reservation?", function (e) {
if (e) {
document.location.href = loc;
}
});
//prevent link from being followed immediately on click
return false;
});
关于jquery - Alertify在确认之前正在执行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25909030/