[英]How to have sweetalert return true/false for confirm without promise?
我喜歡javascript
確認的簡單性,所以我可以這樣做:
if(!confirm("are you sure?"))
return;
在sweetalert
您必須將您的true
代碼嵌套在then
promise函數中。
有沒有辦法讓sweetalert
返回true/false
,就像JS確認的那樣?
根據設計, SweetAlert使用Promises來跟蹤用戶如何與基於HTML的警報進行交互,並且它是非阻塞的 (您仍然可以與網頁/ UI進行交互) ,而不是瀏覽器的內置confirm()
方法, ,當顯示模態窗口時, 它會阻止用戶訪問程序界面的其余部分,直到關閉對話框 。
您不能使用相同的接口阻塞行為調用swal()
,就好像它是另一種類型的confirm()
。 但是 ,通過使用ES2017 async
/ await
功能, 您可以以類似的方式編寫代碼,實際上可以實現相同的目標而不會阻止接口。
為了能夠跨瀏覽器使用async
/ await
,使用轉換器(例如Babel )將帶有ES2015 +功能的源代碼轉換/轉換為ES5 ,這得到了廣泛的支持 :
if
語句中使用swal()
而不包裝: 你可以簡單地用await
來調用swal(...)
:
if (!await swal({text: 'Are you sure?', buttons: true})) {
return;
}
當使用SweetAlert作為真實 ( true
,當用戶確認警報時)或偽造 (否則為null
)作為SweetAlert指南中描述的if
語句的條件時, Promise
將解決。
if
語句中使用swal()
,使用包裝器類似於confirm()
: 為了熟悉confirm()
,將帶有所需選項的swal(...)
分離到async function
:
async function confirm(message) {
return swal({
text: message,
buttons: true
});
}
然后在帶有await
前綴的if
語句中使用它,好像它就像一個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 +功能的源代碼,請考慮使用工具或庫來捆綁您的代碼 (例如Webpack , Browserify , Gulp , Grunt等) ,從長遠來看,不需要太多努力。
完全披露:我創建了存儲庫,以便提供一個易於使用的示例,可以克隆,通過NPM安裝依賴項並立即開始使用。
其他資源:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.