你好,
我有个甜蜜的电话:
var self = this;
swal({
title : $.t('modal.clear.title') || "Etes vous sûr ?",
text : $.t('modal.clear.text') || "Le formulaire sera définitivement perdu !",
type : "warning",
showCancelButton : true,
confirmButtonColor : "#DD6B55",
confirmButtonText : $.t('modal.clear.yes') || "Oui, supprimer",
cancelButtonText : $.t('modal.clear.no') || "Annuler",
closeOnCancel : true
}, function(isConfirm) {
if (isConfirm){
// I Use backbone radio event
self.homePageChannel.trigger('deleteForm', self.currentSelectedForm)
}
});
在回调中,我使用骨干无线电发送一个事件。
至此一切都很好。
在我的事件响应中,我想显示另一个类似这样的甜蜜警报:
formDeleted : function(result) {
swal({
title : $.t('modal.deleted.title') || 'Formulaire supprimé !',
text : $.t('modal.deleted.text') || 'Votre formulaire a été supprimé avec succès',
type : "success",
});
},
并且第二个甜蜜警报不会出现。
而且我确定formDeleted函数已执行。
谢谢你的帮助
您可以尝试在JSFiddle中向我们展示您的代码吗?
我创建了一个JSFiddle: http :
当我单击按钮时,显示第一个sweetAlert,调用了回调,但是第二个sweetAlert没有。
您将在JSFiddle中看到我尝试过使用setTimeout的情况,它在2秒钟后可以工作
我遇到同样的问题。 愿意提供排序所需的任何信息。
+1解决问题所需的条件
万一这对任何人都有帮助。 就我而言,我可以通过将closeOnCancel
和/或closeOnConfirm
为false
。 从而防止关闭第二个警报框。 第二次swal调用可以将它们设置为true
。
这不是正确的行为,我们不应该依赖于closeOnCancel和closeOnConfirm的值是什么。
我同意,但这可能是closeOnConfirm
的预期目的,因为这也是打开第二个盒子的swal示例中的描述方式(http://tristanedwards.me/sweetalert)
我仍然同意这绝对是不直观的。
对我来说,即使那是行不通的。 您可以看一下我创建的小提琴。 https://jsfiddle.net/madhureng/5pj7wwx9/16/
我会很高兴它得到修复,而不是api为我做出决定。
@ maddy2308-您的点击次数过多。 确实有效。
看看这个小提琴: https :
我唯一更改的是取出您的第一个document.click,并将其更改为document.ready。
正如@joenorton所指出的,这就是closeOnConfirm: false
的用途。 我确实同意这有点不直观,因此,如果任何人都有解决问题的方法,我很乐意添加!
@ maddy2308 ,您的小提琴的问题在于$('button')
太含糊,因此也调用了swal的按钮。 如果您也更改了$('body > button')
它应该可以工作。
我也遭受了这个问题的困扰,而且我确实认为需要对此进行更改。
@ t4t5在不查看源代码的情况下,我们可以假设以下内容:
the first swal is shown at point A in time
the user interacts with the first swal at point B in time
the callback is called and invokes the second swal at point C in time
the active swal is dismissed at point D in time
解决此问题的简单方法如下:
<strong i="11">@A</strong>: An integer variable is set that increases with every call to swal
<strong i="12">@B</strong>: The current value of the variable is remembered
<strong i="13">@D</strong>: If the variable has changed, do not call swal.close
这将允许C
调用任意数量的新对话框,而无需对当前代码库进行任何修改。
我有同样的问题,通过在Confirm操作上添加$ timeout(使用Angular)解决了if (isConfirm){
return $timeout(function() {
// I Use backbone radio event
self.homePageChannel.trigger('deleteForm', self.currentSelectedForm)
}, 100);
}
在以下情况下,我也会发生此错误:
$http
请求offline
,强制$http
请求立即失败。$http
失败时调用错误甜蜜警报。第一个确认警报将显示正常,但错误警报将不会显示。
注意:我没有深入研究代码,但是看起来像任何现有的甜蜜警报上的关闭动画都应该被取消,并且应该立即销毁,然后第二个警报将很好地显示。
编辑:如我所料,问题在于第一个甜蜜警报确认。 将animation
为false可以解决该问题。 但这对我来说似乎是一个错误,因为我可能希望在发生错误的情况下启用动画。
我提出两种解决方案:
第一个:如果在关闭现有警报的动画时调用了第二个警报,请停止动画处理,立即关闭当前警报并显示新警报。
第二:关闭动画结束时,将要打开的第二个警报排入队列。
第二种解决方案应该使事情变得更顺畅,而第一种解决方案则使错误模态的显示速度更快!
我会尝试提出请求,但我以前从未为这个项目做过贡献,如果有人知道要在哪里修复,请随时提出请求! :)
@ t4t5如果您同意我可以解决问题,请查看我的报告和解决方案!
您可以使用querySelectorAll ,它返回所有元素,因此您可以循环返回的值
var alertBtn = document.querySelectorAll('.js-alert');
for (var i = 0; i < alertBtn.length; i++) {
alertBtn[i].onclick = function(){
swal({
title: "text",
text: "text text"
});
};
}
我的SweetAlert遇到了同样的问题,当第二个swal应该出现时,它们没有出现,我只是在控制台中出现错误,通过在函数中包含$ timeout来解决了。
function(error) {
console.log(error);
$timeout(function(){
SweetAlert.error('Erro');
},100) }
我有同样的问题,但是@PommeVerte的解决方案解决了它。 我需要将closeOnCancel: false
设置为父级swal()。
从SweetAlert 2.0开始,不再需要closeOnConfirm
和closeOnCancel
来链接SweetAlerts。 只是使用诺言! :)
SetTimeout可以解决回调后的问题,但是我想更多地了解问题的原因。
最有用的评论
万一这对任何人都有帮助。 就我而言,我可以通过将
closeOnCancel
和/或closeOnConfirm
为false
。 从而防止关闭第二个警报框。 第二次swal调用可以将它们设置为true
。