Здравствуйте,
У меня такой призыв к сладкому:
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://jsfiddle.net/5pj7wwx9/
Когда я нажимаю на кнопку, отображается первое sweetAlert, вызывается обратный вызов, а второго sweetAlert нет.
Вы увидите в JSFiddle, который я пробовал с помощью setTimeout, он работает через 2 секунды
У меня такая же проблема. Готовы предоставить любую информацию, необходимую для сортировки этого.
+1 к решению, необходимому для проблемы
если это кому-нибудь поможет. В моем случае я смог разобраться в этом, установив closeOnCancel
и / или closeOnConfirm
на false
. Таким образом предотвращается закрытие второго окна предупреждения. Второй вызов swal может установить их на true
.
Это неправильное поведение, мы не должны зависеть от значений closeOnCancel и closeOnConfirm.
Я согласен, но это может быть предполагаемая цель closeOnConfirm
поскольку именно так он изображен в примерах ласточки, которые открывают второй ящик (http://tristanedwards.me/sweetalert)
Я все еще согласен, что это определенно не интуитивно понятно.
для меня даже это не работает. Вы можете взглянуть на созданную мной скрипку. https://jsfiddle.net/madhureng/5pj7wwx9/16/
Я буду более чем счастлив, что он будет исправлен, а не api примет решение за меня.
@ maddy2308 - у вас слишком много кликов. Это действительно работает.
Посмотрите на эту скрипку: https://jsfiddle.net/g8j1acv4/
Единственное, что я изменил, - это вынул ваш первый document.click и изменил его на document.ready.
Как отмечает @joenorton , это то, для чего closeOnConfirm: false
. Я согласен с тем, что это немного неинтуитивно, поэтому, если у кого-то есть решение проблемы, я был бы рад добавить его!
@ maddy2308 , проблема с вашей скрипкой в том, что $('button')
слишком неоднозначно, поэтому кнопки ласточки также вызываются. Если вы измените его тоже $('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
вызывать любое количество новых диалогов с минимальными изменениями, необходимыми для текущей кодовой базы.
У меня была такая же проблема, я решил ее, добавив тайм-аут $ для действия подтверждения (с Angular)
if (isConfirm){
return $timeout(function() {
// I Use backbone radio event
self.homePageChannel.trigger('deleteForm', self.currentSelectedForm)
}, 100);
}
Эта ошибка возникает и у меня в следующей ситуации:
$http
на angular$http
, установив регулировку на offline
в инструментах разработчика Chrome .$http
.Первое подтверждающее предупреждение будет отображаться нормально, но предупреждение об ошибке не появится.
Примечание: я не углублялся в код, но похоже, что анимация закрытия любого существующего сладкого предупреждения должна быть отменена и должна быть немедленно уничтожена, тогда второе предупреждение будет отображаться нормально.
Изменить: Как я и ожидал, проблема связана с первым сладким подтверждением предупреждения. Установка animation
на false при первом проглатывании решает проблему. Но для меня это похоже на ОШИБКУ, потому что я могу захотеть, чтобы анимация была включена, если ошибка не возникает.
Предлагаю два решения:
1-й: если второе предупреждение вызывается во время выключения существующего предупреждения, остановите процесс анимации, немедленно закройте текущее предупреждение и покажите новое.
2-й: поставить в очередь второе предупреждение, которое будет открыто после завершения анимации закрытия.
Второе решение должно упростить работу, а первое решение ускорит отображение модального окна ошибки!
Я попытаюсь сделать пул-реквест, но я никогда раньше не участвовал в этом проекте. Если кто-то знает, где исправить, не стесняйтесь сначала сделать пул-реквест! :)
@ 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, когда должен появиться второй глоток, их нет, я просто получаю ошибку в моей консоли, решаемую включением тайм-аута $ в мою функцию.
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
.