私はこれができるようにjavascript
confirmの単純さが好きです:
if(!confirm("are you sure?"))
return;
sweetalert
では、true
コードをthen
promise関数内にネストする必要があります。
JSで確認するのと同じ方法でsweetalert
にtrue/false
を返す方法はありますか?
設計上、 SweetAlertはPromises を使用して、ユーザーがHTMLベースのアラートをどのように操作するかを追跡します。非ブロッキングです(引き続きWebページ/ UIを操作できます)ブラウザの組み込みの confirm()
メソッドとは対照的に、モーダルウィンドウを表示するときにユーザーがプログラムの残りのインターフェイスにアクセスできないようにしますダイアログボックスが閉じるまで。
できませんswal()
を、別のタイプのconfirm()
であるかのように、同じインターフェイスブロック動作で呼び出すことができます。ただし、ES2017を使用することにより async
/ await
機能、同様の方法でコードを記述し、実質的に同じ目標を達成できますインターフェースをブロックせずに。
ブラウザ間でasync
/await
を使用できるようにするには、トランスパイラー(eg Babel )を使用してソースコードを ES2015 +機能 から ES5 、これは 広くサポートされています :
if
ステートメントでswal()
をラップせずに使用する:await
を使用してswal(...)
を呼び出すだけです。
if (!await swal({text: 'Are you sure?', buttons: true})) {
return;
}
そして、SweetAlertを truthy(Promise
、ユーザーがアラートを確認したとき)または falsy _として使用すると、true
は解決されます。(null
それ以外の場合)SweetAlertガイド で説明されているif
ステートメントの条件として。
swal()
に似たラッパーを使用してif
ステートメントでconfirm()
を使用する:confirm()
に精通するために、swal(...)
を必要なオプションで async function
:に分割します。
async function confirm(message) {
return swal({
text: message,
buttons: true
});
}
次に、接頭辞if
が付いたawait
ステートメントで、それがconfirm()
の形式のようであるかのように使用します。したがって、期待どおりに機能します。
if (!await confirm('Are you sure?')) {
return;
}
async function
の外でawait
を使用することは 現在サポートされていません です。この問題を回避するには、コードをイベントハンドラーに配置します。
document.addEventListener('DOMContentLoaded', async () => {
// ... await and other async code here
});
(async () => {
// ... await and other async code here
})();
ES2015 +機能を含むソースコードを簡単にトランスパイルするには、ツールまたはライブラリを使用してコードをバンドルすることを検討してください(eg Webpack 、 Browserify 、 Gulp 、 Grunt など)長期的にはあまり労力をかけずに。
このリポジトリWebpack に基づく)で実際の例のソースを確認できます。
完全な開示:クローンを作成し、NPMを介して依存関係をインストールし、すぐに使用を開始できる、使いやすい例を提供するためにリポジトリを作成しました。
追加のリソース:
コールバックで解決しました:
function confirm(question, text, callback) {
swal({
title: question,
text: text,
buttons: true
}).then((confirmed) => {
if (confirmed) {
callback();
}
});
}
Sweetalert2v7.24.1の使用
便利な回避策。
関数
function sweetConfirm(title, message, callback) {
swal({
title: title,
text: message,
type: 'warning',
showCancelButton: true
}).then((confirmed) => {
callback(confirmed && confirmed.value == true);
});
}
使用法
sweetConfirm('Confirm action!', 'Are you sure?', function (confirmed) {
if (confirmed) {
// YES
}
else {
// NO
}
});