我决定使用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代码,而不是从外部单击处理程序函数中返回。

您需要做的是开始使用可用的回调方法,而不是反对回调方法-我建议按以下方式重组您的代码。在确认.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;
});

关于jquery - Alertify在确认之前正在执行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25909030/

10-11 11:48