Jquery 确认前是否正在执行Alertify?

Jquery 确认前是否正在执行Alertify?,jquery,alertify,Jquery,Alertify,我决定用Alertify对我的代码进行一些修改和风格设计。我的旧代码: <script type="text/javascript"> $('.ask').click(function(){ var answer = confirm('<?php echo $this->translate('Delete route?'); ?>'); return answer; }); })) 我看到一些人有类似的问题,我看到我需要使用防止默认值(这是有

我决定用Alertify对我的代码进行一些修改和风格设计。我的旧代码:

<script type="text/javascript">
$('.ask').click(function(){
    var answer = confirm('<?php echo $this->translate('Delete route?'); ?>');   
    return answer;
});
}))

我看到一些人有类似的问题,我看到我需要使用防止默认值(这是有意义的)代码:

$(".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脚本的代码。当您尝试
返回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;
});

+1但作为另一种方式-而不是回调函数-您可以使用
$。Deferred()
。将不起作用检查此处表单将提交不等待确定或取消假设
。ask
是一个表单提交按钮,实际上未在任何位置指定,只需将其转换为正常的非提交按钮即可。也不需要阻止默认操作,这可能会导致其他不必要的问题,因为页面变得更加复杂。@user3819192只需在click handler结尾添加
return false
。感谢您的响应。现在事情更清楚了,但我不确定我必须做什么。顺便说一句,我忘了说那个。问是哪条路通向zend控制器,在那里删除。
$(".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;
});