Jquery 确认前是否正在执行Alertify?
我决定用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; }); })) 我看到一些人有类似的问题,我看到我需要使用防止默认值(这是有
<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;
});