Sweetalert: Swal kedua tidak dijalankan

Dibuat pada 15 Jan 2015  ·  19Komentar  ·  Sumber: t4t5/sweetalert

Halo,

Saya memiliki panggilan perubahan yang manis ini:

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)
   }
});

Dalam panggilan balik saya mengirim acara dengan radio backbone.
Pada titik ini semuanya baik-baik saja.

Dan dalam respons acara saya, saya ingin menampilkan peringatan manis lainnya seperti ini:

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",
        });
  },

Dan peringatan manis kedua tidak muncul.
Dan saya yakin fungsi formDeleted dijalankan.

Terima kasih atas bantuan Anda

bug

Komentar yang paling membantu

memetikan ini membantu siapa pun. Dalam kasus saya, saya dapat menyelesaikan masalah ini dengan menyetel closeOnCancel dan / atau closeOnConfirm menjadi false . Dengan demikian mencegah penutupan kotak peringatan kedua. Panggilan swal kedua dapat mengaturnya menjadi true .

Semua 19 komentar

Bisakah Anda mencoba menunjukkan kode Anda di JSFiddle?

Saya telah membuat JSFiddle: http://jsfiddle.net/5pj7wwx9/

Ketika saya mengklik tombol sweetAlert pertama ditampilkan, callback dipanggil tetapi sweetAlert kedua tidak.

Anda akan melihat di JSFiddle saya sudah mencoba dengan setTimeout, ini berfungsi setelah 2 detik

Saya mengalami masalah yang sama. Bersedia memberikan informasi apapun yang diperlukan untuk mengurutkan ini.

+1 untuk penyelesaian yang diperlukan untuk masalah tersebut

memetikan ini membantu siapa pun. Dalam kasus saya, saya dapat menyelesaikan masalah ini dengan menyetel closeOnCancel dan / atau closeOnConfirm menjadi false . Dengan demikian mencegah penutupan kotak peringatan kedua. Panggilan swal kedua dapat mengaturnya menjadi true .

Itu bukan perilaku yang benar, kita seharusnya tidak bergantung pada nilai closeOnCancel dan closeOnConfirm.

Saya setuju, tetapi itu mungkin tujuan yang dimaksudkan dari closeOnConfirm karena itu juga digambarkan dalam contoh swal yang membuka kotak kedua (http://tristanedwards.me/sweetalert)
Saya masih setuju itu pasti tidak intuitif.

bagi saya bahkan itu tidak berhasil. Anda dapat melihat biola yang saya buat. https://jsfiddle.net/madhureng/5pj7wwx9/16/

Saya akan lebih dari senang bahwa itu diperbaiki daripada mengambil keputusan untuk saya.

@ maddy2308 - Anda mengalami terlalu banyak klik. Itu berhasil.
Lihat biola ini: https://jsfiddle.net/g8j1acv4/

Satu-satunya hal yang saya ubah adalah mengeluarkan document.click pertama Anda dan mengubahnya menjadi document.ready.

Seperti yang @joenorton tunjukkan, untuk inilah closeOnConfirm: false . Saya setuju bahwa ini sedikit tidak intuitif, jadi jika ada yang punya solusi untuk masalah ini, saya akan dengan senang hati menambahkannya!

@ maddy2308 , masalah dengan biola Anda adalah $('button') terlalu ambigu, jadi tombol swal juga dipanggil. Jika Anda mengubahnya terlalu $('body > button') seharusnya berfungsi.

Saya juga menderita masalah ini, dan saya yakin ini perlu diubah.

@ t4t5 Tanpa melihat kode sumber, kita dapat mengasumsikan sebagai berikut:

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

Solusi mudah untuk mengatasi masalah ini adalah sebagai berikut:

<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

Ini akan memungkinkan C untuk memanggil sejumlah dialog baru, dengan sedikit modifikasi yang diperlukan untuk basis kode saat ini.

Saya memiliki masalah yang sama, menyelesaikannya dengan menambahkan $ timeout pada tindakan konfirmasi (dengan Angular)
if (isConfirm){ return $timeout(function() { // I Use backbone radio event self.homePageChannel.trigger('deleteForm', self.currentSelectedForm) }, 100); }

Bug ini terjadi pada saya juga dalam situasi berikut:

  1. Panggil sweet alert konfirmasi yang memicu permintaan $http angular
  2. Paksa $http permintaan segera gagal dengan menyetel pembatasan ke offline pada alat pengembang Chrome .
  3. Panggil peringatan manis kesalahan pada $http kegagalan.

Peringatan konfirmasi pertama akan baik-baik saja, tetapi peringatan kesalahan tidak akan ditampilkan.

Catatan: Saya tidak menyelam ke dalam kode, tetapi sepertinya animasi tutup pada peringatan manis yang ada harus dibatalkan dan harus segera dimusnahkan, maka peringatan ke-2 akan ditampilkan dengan baik.


Sunting: Seperti yang saya harapkan, masalahnya adalah dengan konfirmasi peringatan manis pertama. Menyetel animation menjadi false pada swal pertama menghentikan masalah. Tapi sepertinya BUG bagi saya, karena saya mungkin ingin animasi diaktifkan jika kesalahan tidak terjadi.

Saya mengusulkan dua solusi:

Pertama: Jika peringatan kedua dipanggil saat peringatan yang ada sedang dianimasikan, hentikan proses animasi, segera tutup peringatan saat ini dan tampilkan yang baru.

Kedua: Antrian peringatan kedua untuk dibuka ketika animasi penutupan selesai.

Solusi kedua seharusnya membuat segalanya lebih lancar, sedangkan solusi pertama membuat modal kesalahan muncul lebih cepat!

Saya akan mencoba melakukan permintaan tarik, tetapi saya tidak pernah berkontribusi pada proyek ini sebelumnya, jika seseorang tahu di mana harus memperbaikinya, silakan membuat permintaan tarik terlebih dahulu! :)

@ t4t5 Silakan lihat laporan saya dan solusinya, jika Anda setuju saya dapat memperbaikinya!

Anda bisa menggunakan querySelectorAll , ini mengembalikan semua elemen, sehingga Anda bisa mengulang nilai yang dikembalikan

var alertBtn = document.querySelectorAll('.js-alert');

for (var i = 0; i < alertBtn.length; i++) {
    alertBtn[i].onclick = function(){
        swal({
            title: "text",
            text: "text text"
            });
    };
}

Memiliki masalah yang sama dengan SweetAlert saya, ketika swal kedua muncul, ternyata tidak, saya hanya mendapatkan kesalahan di konsol saya, diselesaikan dengan memasukkan $ timeout dalam fungsi saya.

function(error) { console.log(error); $timeout(function(){ SweetAlert.error('Erro'); },100) }

Saya memiliki masalah yang sama tetapi solusi @PommeVerte menyelesaikannya. Saya perlu menyetel closeOnCancel: false ke induk swal ().

Mulai SweetAlert 2.0, closeOnConfirm dan closeOnCancel tidak lagi diperlukan untuk menghubungkan SweetAlerts. Gunakan saja janji ! :)

SetTimeout dapat menyelesaikan masalah setelah panggilan balik, tetapi saya ingin tahu lebih banyak tentang penyebab masalahnya.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

rapeflower picture rapeflower  ·  4Komentar

yrshaikh picture yrshaikh  ·  4Komentar

mateuszjarzewski picture mateuszjarzewski  ·  4Komentar

blackrosezy picture blackrosezy  ·  6Komentar

voodoo6 picture voodoo6  ·  4Komentar