Sweetalert: 2番目のスワルは実行されません

作成日 2015年01月15日  ·  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",
        });
  },

そして、2番目の甘いアラートは表示されません。
そして、formDeleted関数が実行されると確信しています。

ご協力いただきありがとうございます

bug

最も参考になるコメント

これが誰かを助ける場合に備えて。 私の場合、 closeOnCancelcloseOnConfirmfalse設定することで、これを整理することができました。 したがって、2番目のアラートボックスが閉じないようにします。 2回目のswal呼び出しでは、それらをtrue設定できます。

全てのコメント19件

JSFiddleでコードを表示してみてください。

JSFiddleを作成しました: http ://jsfiddle.net/5pj7wwx9/

ボタンをクリックすると、最初のsweetAlertが表示され、コールバックが呼び出されますが、2番目のsweetAlertは呼び出されません。

setTimeoutで試したJSFiddleに表示されますが、2秒後に機能します

私はこれと同じ問題を抱えています。 これを分類するために必要な情報を提供する用意があります。

問題に必要な解決策に+1

これが誰かを助ける場合に備えて。 私の場合、 closeOnCancelcloseOnConfirmfalse設定することで、これを整理することができました。 したがって、2番目のアラートボックスが閉じないようにします。 2回目のswal呼び出しでは、それらをtrue設定できます。

これは正しい動作ではありません。closeOnCancelとcloseOnConfirmの値に依存するべきではありません。

同意しますが、2番目のボックスを開くスワルの例(http://tristanedwards.me/sweetalert)でも同じように表現されているため、 closeOnConfirmの意図された目的である可能性があります。
私はまだそれが間違いなく直感的ではないことに同意します。

私にとってはそれでもうまくいきません。 私が作成したフィドルをご覧ください。 https://jsfiddle.net/madhureng/5pj7wwx9/16/

apiが私に代わって決定を下すのではなく、修正されることを嬉しく思います。

@ maddy2308-クリック数が多すぎます。 それは機能します。
このフィドルをチェックしてください: https

私が変更したのは、最初の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は、現在のコードベースにほとんど変更を加えることなく、任意の数の新しいダイアログを呼び出すことができます。

私は同じ問題を抱えていましたが、確認アクションに$ timeoutを追加することで解決しました(Angularを使用)
if (isConfirm){ return $timeout(function() { // I Use backbone radio event self.homePageChannel.trigger('deleteForm', self.currentSelectedForm) }, 100); }

このバグは、次の状況でも発生します。

  1. Angularで$httpリクエストをトリガーする確認スイートアラートを呼び出す
  2. Chromeの開発者ツールでスロットルをofflineに設定して、 $httpリクエストの即時失敗を強制します
  3. $http失敗時にエラースイートアラートを呼び出します。

最初の確認アラートは正常に表示されますが、エラーアラートは表示されません。

注:コードを詳しく調べませんでしたが、既存のスイートアラートのクローズアニメーションをキャンセルしてすぐに破棄する必要があるようです。そうすると、2番目のアラートが正常に表示されます。


編集:私が予想したように、問題は最初の甘いアラートの確認にあります。 最初のスワルでanimationをfalseに設定すると、問題が停止します。 しかし、エラーが発生しない場合にアニメーションを有効にしたい場合があるため、私にとってはバグのように見えます。

私は2つの解決策を提案します:

1番目:既存のアラートがアニメーション化されているときに2番目のアラートが呼び出された場合は、アニメーションプロセスを停止し、現在のアラートをすぐに閉じて、新しいアラートを表示します。

2番目:アニメーションを閉じるときに開く2番目のアラートをキューに入れます。

2番目の解決策は物事をよりスムーズにするはずですが、1番目の解決策はエラーモーダルがより速く見えるようにします!

プルリクエストをしようと思いますが、これまでこのプロジェクトに貢献したことはありません。誰かが修正する場所を知っている場合は、最初にプルリクエストを行ってください。 :)

@ 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で同じ問題が発生しましたが、2番目のスワルが表示されるはずですが、表示されません。コンソールでエラーが発生し、関数に$ timeoutを含めることで解決しました。

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

私は同じ問題を抱えていましたが、 @ PommeVerteの解決策で解決しました。 closeOnCancel: falseを親swal()に設定する必要がありました。

SweetAlert 2.0以降、SweetAlertをチェーンするためにcloseOnConfirmcloseOnCancelは不要になりました。 ただ、使用約束を! :)

SetTimeoutはコールバック後に問題を解決できますが、問題の原因について詳しく知りたいのですが。

このページは役に立ちましたか?
0 / 5 - 0 評価

関連する問題

rafatux picture rafatux  ·  5コメント

voodoo6 picture voodoo6  ·  4コメント

daftspunk picture daftspunk  ·  4コメント

mouro001 picture mouro001  ·  3コメント

vmitchell85 picture vmitchell85  ·  6コメント