SweetAlert2:真的没有办法在单击按钮之前停止 JS 代码吗?
SweetAlert2: Really no way to stop JS code until a button is clicked?
在 Swal Github 中建议在 SO 中向 SweetAlert2 提问,因此我在这里发帖...
在我的(asp.net 核心)应用程序的保存按钮后面,我检查了一些东西,并且 - 在某些情况下 - 必须询问用户 (yes/no) 并且 - 根据他的选择 -必须覆盖一些数据然后存储。
如果我使用 (jQuery) 警报或确认,代码将停止,直到用户单击按钮。
在 Swal 中,我没有找到任何方法(包括“.then(“) 停止 代码,直到用户单击按钮。
显示了消息,但代码运行得更远....
真的不可以用 Swal 停止代码吗...?
=>如果有办法,怎么做...?
谢谢
支持回调吧?这是我在 examples.
中找到的一些代码
Swal.fire({
title: 'Are you sure?',
text: "You won't be able to revert this!",
icon: 'warning',
showCancelButton: true,
allowOutsideClick: false,
allowEscapeKey: false,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Yes, delete it!'
}).then((result) => {
if (result.value) {
Swal.fire(
'Deleted!',
'Your file has been deleted.',
'success'
)
}
})
可以根据result.value继续执行
看来,确实现在有办法 停止 JS 代码,直到用户完成他的选择
所以..我不得不改变我的逻辑。
之前的逻辑:
要检查某些东西 ( 1 ) ,显示一个 swal(例如将焦点设置到控件)然后在代码工作中显示 return(因为 return).
这样,显示消息(直到用户关闭它)并且不存储数据。
向用户询问一些事情(你真的想......”然后根据用户的回答在存储日期之前做一些事情,不工作,因为 JS 代码 不会 停止,直到用户做出选择。
显示了 Der swal,但数据数据立即保存 ( 3 )(此处无需等待)。
为了达到我的需要,我不得不改变逻辑。
新逻辑
我不得不 解耦 保存的检查逻辑:
支票没有变化 ( 1 )
将数据 ( 3 ) 的保存移动到单独的函数 (SaveData())
中
给出 swal ( 2 ) 然后从 swal 函数中调用 SaveData() ( 3 )。
我的swal代码:
if ((AvatarHochgeladen) && (!(AvatarUebernommen))) {
swal.fire({
title: '! Achtung !',
html: 'Sie haben eine eigene Grafik hochgeladen, diese aber nicht mit dem Button "Ihren upload übernehmen" als aktuellen Avatar übernommen. <br> Wenn Sie die Daten so speichern, geht Ihr hochgeladener Avatar verloren. <br> Wollen Sie Ihre hochgeladene Grafik als Avatar speichern?',
icon: 'question',
showCancelButton: true,
confirmButtonColor: 'blue',
cancelButtonText: 'Nein',
confirmButtonText: 'Ja',
}).then((result) => {
if (result.value) {
AvatarSpeichern = AvatarBase64;
SaveUserdata();
}
else { SaveUserdata(); }
})
}
所以..如果用户选择"Yes",我替换一个变量并调用SaveData(),如果用户选择"No"我直接调用SaveData()。
我的结论:
由于 swal 是 "non blocking"(不要停止 运行 JS 脚本),我们必须拆分逻辑并从 swal 内部调用(根据用户选择)代码。
我试试:
function delete_rec_sub_button(id) {
Swal.fire({
title: 'Are you sure?',
text: "You won't be able to revert this!",
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Yes, delete it!'
}).then((result) => {
if (result.isConfirmed) {
delete_rec_sub_button.yesKill();
}
});
delete_rec_sub_button.yesKill = function() {
//real code delete(id)
if('return sucess of delete'){
Swal.fire(
'Deleted!',
'Your file has been deleted.',
'success'
)
}else{
Swal.fire(
'error!',
'Unable to delete, current record is in use',
'error'
)
}
};
}
在 Swal Github 中建议在 SO 中向 SweetAlert2 提问,因此我在这里发帖...
在我的(asp.net 核心)应用程序的保存按钮后面,我检查了一些东西,并且 - 在某些情况下 - 必须询问用户 (yes/no) 并且 - 根据他的选择 -必须覆盖一些数据然后存储。
如果我使用 (jQuery) 警报或确认,代码将停止,直到用户单击按钮。
在 Swal 中,我没有找到任何方法(包括“.then(“) 停止 代码,直到用户单击按钮。
显示了消息,但代码运行得更远....
真的不可以用 Swal 停止代码吗...?
=>如果有办法,怎么做...?
谢谢
支持回调吧?这是我在 examples.
中找到的一些代码 Swal.fire({
title: 'Are you sure?',
text: "You won't be able to revert this!",
icon: 'warning',
showCancelButton: true,
allowOutsideClick: false,
allowEscapeKey: false,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Yes, delete it!'
}).then((result) => {
if (result.value) {
Swal.fire(
'Deleted!',
'Your file has been deleted.',
'success'
)
}
})
可以根据result.value继续执行
看来,确实现在有办法 停止 JS 代码,直到用户完成他的选择
所以..我不得不改变我的逻辑。
之前的逻辑:
要检查某些东西 ( 1 ) ,显示一个 swal(例如将焦点设置到控件)然后在代码工作中显示 return(因为 return).
这样,显示消息(直到用户关闭它)并且不存储数据。
向用户询问一些事情(你真的想......”然后根据用户的回答在存储日期之前做一些事情,不工作,因为 JS 代码 不会 停止,直到用户做出选择。
显示了 Der swal,但数据数据立即保存 ( 3 )(此处无需等待)。
为了达到我的需要,我不得不改变逻辑。
新逻辑
支票没有变化 ( 1 )
将数据 ( 3 ) 的保存移动到单独的函数 (SaveData())
中
给出 swal ( 2 ) 然后从 swal 函数中调用 SaveData() ( 3 )。
我的swal代码:
if ((AvatarHochgeladen) && (!(AvatarUebernommen))) {
swal.fire({
title: '! Achtung !',
html: 'Sie haben eine eigene Grafik hochgeladen, diese aber nicht mit dem Button "Ihren upload übernehmen" als aktuellen Avatar übernommen. <br> Wenn Sie die Daten so speichern, geht Ihr hochgeladener Avatar verloren. <br> Wollen Sie Ihre hochgeladene Grafik als Avatar speichern?',
icon: 'question',
showCancelButton: true,
confirmButtonColor: 'blue',
cancelButtonText: 'Nein',
confirmButtonText: 'Ja',
}).then((result) => {
if (result.value) {
AvatarSpeichern = AvatarBase64;
SaveUserdata();
}
else { SaveUserdata(); }
})
}
所以..如果用户选择"Yes",我替换一个变量并调用SaveData(),如果用户选择"No"我直接调用SaveData()。
我的结论:
由于 swal 是 "non blocking"(不要停止 运行 JS 脚本),我们必须拆分逻辑并从 swal 内部调用(根据用户选择)代码。
我试试:
function delete_rec_sub_button(id) {
Swal.fire({
title: 'Are you sure?',
text: "You won't be able to revert this!",
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Yes, delete it!'
}).then((result) => {
if (result.isConfirmed) {
delete_rec_sub_button.yesKill();
}
});
delete_rec_sub_button.yesKill = function() {
//real code delete(id)
if('return sucess of delete'){
Swal.fire(
'Deleted!',
'Your file has been deleted.',
'success'
)
}else{
Swal.fire(
'error!',
'Unable to delete, current record is in use',
'error'
)
}
};
}