مرحبا،
لدي هذه المكالمة اللطيفة:
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 ، إنه يعمل بعد ثانيتين
أواجه نفس المشكلة. على استعداد لتقديم أي معلومات مطلوبة لفرز هذا.
+1 للحل المطلوب لهذه المشكلة
إذا كان هذا يساعد أي شخص. في حالتي ، تمكنت من حل ذلك عن طريق تعيين closeOnCancel
و / أو closeOnConfirm
على false
. وبالتالي منع إغلاق مربع التنبيه الثاني. يمكن لمكالمة swal الثانية تعيينها على true
.
هذا ليس سلوكًا صحيحًا ، فلا يجب أن نعتمد على قيمة closeOnCancel و closeOnConfirm.
أوافق ، ولكن قد يكون الغرض المقصود هو closeOnConfirm
حيث يتم تصويره أيضًا في أمثلة swal التي تفتح مربعًا ثانيًا (http://tristanedwards.me/sweetalert)
ما زلت أوافق على أنه بالتأكيد غير بديهي.
بالنسبة لي حتى هذا لا يعمل. يمكنك إلقاء نظرة على الكمان الذي صنعته. https://jsfiddle.net/madhureng/5pj7wwx9/16/
سأكون أكثر من سعيد لأنه يتم إصلاحه بدلاً من اتخاذ api القرار نيابة عني.
@ maddy2308 - لديك عدد كبير جدًا من النقرات الجارية. انها تقوم بالعمل.
تحقق من هذا الكمان: https://jsfiddle.net/g8j1acv4/
الشيء الوحيد الذي قمت بتغييره هو إخراج المستند الأول الخاص بك. انقر فوق وقم بتغييره إلى المستند.
كما يشير 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
باستدعاء أي قدر من مربعات الحوار الجديدة ، مع القليل جدًا من التعديلات المطلوبة لقاعدة الشفرة الحالية.
واجهت نفس المشكلة ، وتم حلها عن طريق إضافة مهلة $ على إجراء التأكيد (مع Angular)
if (isConfirm){
return $timeout(function() {
// I Use backbone radio event
self.homePageChannel.trigger('deleteForm', self.currentSelectedForm)
}, 100);
}
يحدث هذا الخطأ معي أيضًا في الحالة التالية:
$http
على الزاوية$http
تقليل الإخفاق من خلال تعيين التقييد على offline
على أدوات مطور Chrome .$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 الخاص بي ، عندما يجب أن يظهر الطائر الثاني ، لم يحدث ذلك ، لقد تلقيت خطأ في وحدة التحكم الخاصة بي ، وتم حلها عن طريق تضمين مهلة $ في وظيفتي.
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
.