こんにちは、
私はこの甘い代替電話をしました:
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関数が実行されると確信しています。
ご協力いただきありがとうございます
JSFiddleでコードを表示してみてください。
JSFiddleを作成しました: http ://jsfiddle.net/5pj7wwx9/
ボタンをクリックすると、最初のsweetAlertが表示され、コールバックが呼び出されますが、2番目のsweetAlertは呼び出されません。
setTimeoutで試したJSFiddleに表示されますが、2秒後に機能します
私はこれと同じ問題を抱えています。 これを分類するために必要な情報を提供する用意があります。
問題に必要な解決策に+1
これが誰かを助ける場合に備えて。 私の場合、 closeOnCancel
やcloseOnConfirm
をfalse
設定することで、これを整理することができました。 したがって、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);
}
このバグは、次の状況でも発生します。
$http
リクエストをトリガーする確認スイートアラートを呼び出すoffline
に設定して、 $http
リクエストの即時失敗を強制します。$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をチェーンするためにcloseOnConfirm
とcloseOnCancel
は不要になりました。 ただ、使用約束を! :)
SetTimeoutはコールバック後に問題を解決できますが、問題の原因について詳しく知りたいのですが。
最も参考になるコメント
これが誰かを助ける場合に備えて。 私の場合、
closeOnCancel
やcloseOnConfirm
をfalse
設定することで、これを整理することができました。 したがって、2番目のアラートボックスが閉じないようにします。 2回目のswal呼び出しでは、それらをtrue
設定できます。