我决定使用Alertify对我的代码进行修改和设计。我的旧代码:
<script type="text/javascript">
$('.ask').click(function(){
var answer = confirm('<?php echo $this->translate('Delete route?'); ?>');
return answer;
});
当我按下确定时,php脚本会运行并删除记录。 Javascript返回true或false。
我对Alertify的问题是,我甚至无法按下确定或取消,我的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之前没有运行但是当我按下其中一个按钮时它也没有运行。什么都没发生。 有什么帮助吗?
答案 0 :(得分:6)
您正在遇到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;
});