Alertify在确认之前正在执行?

时间:2014-09-18 09:31:32

标签: jquery alertify

我决定使用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之前没有运行但是当我按下其中一个按钮时它也没有运行。什么都没发生。 有什么帮助吗?

1 个答案:

答案 0 :(得分:6)

您正在遇到JavaScript的异步特性。在原始代码中,在confirm对话框打开时暂停执行所有JavaScript,因此您可以直接使用它的返回值。但是,当您使用alertify.confirm时,它不会暂停脚本的执行,因此单击处理程序会立即返回,并且它周围的任何代码也将运行 - 即调用您的php脚本的代码。当您从return true;回调函数内部尝试alertify.confirm时,您将从该内部函数返回到alertify代码,而不是从外部单击处理函数返回。

你需要做的是开始使用可用的回调方法,而不是反对它 - 我建议重构你的代码如下。确认.aska标记后,以下内容应该有效:

$(".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;
});