5

我决定用 Alertify 修改和设计我的代码。我的旧代码:

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

当我按下确定时,一个 php 脚本运行并删除记录。Javascript 返回真或假。

我对 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 脚本在我按下确定/取消之前不会运行,但是当我按下其中一个按钮时它也不会运行。什么都没发生。请问有什么帮助吗?

4

1 回答 1

6

您遇到了 JavaScript 的异步特性。在原始代码中,所有 JavaScript 的执行在confirm对话框打开时都会暂停,因此您可以直接使用它的返回值。但是,当您使用 时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;
});
于 2014-09-18T09:40:20.177 回答