Sweetalert: لم يتم تنفيذ swal الثاني

تم إنشاؤها على ١٥ يناير ٢٠١٥  ·  19تعليقات  ·  مصدر: t4t5/sweetalert

مرحبا،

لدي هذه المكالمة اللطيفة:

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.

شكرا لمساعدتك

bug

التعليق الأكثر فائدة

إذا كان هذا يساعد أي شخص. في حالتي ، تمكنت من حل ذلك عن طريق تعيين closeOnCancel و / أو closeOnConfirm على false . وبالتالي منع إغلاق مربع التنبيه الثاني. يمكن لمكالمة swal الثانية تعيينها على true .

ال 19 كومينتر

هل يمكنك محاولة إظهار الكود الخاص بك في 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); }

يحدث هذا الخطأ معي أيضًا في الحالة التالية:

  1. قم باستدعاء تنبيه حلو للتأكيد يقوم بتشغيل طلب $http على الزاوية
  2. فرض طلب $http تقليل الإخفاق من خلال تعيين التقييد على offline على أدوات مطور Chrome .
  3. استدعاء تنبيه حلو خطأ عند فشل $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 حل المشكلة بعد رد الاتصال ، لكني أود معرفة المزيد عن سبب المشكلة.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات