在aspx页面中,有一个像这样的asp:linkbutton:
<asp:LinkButton runat="server" ID="btExit" Text="Exit"
OnClientClick="javascript:return confirmExit();"
EnableViewState="false"
OnClick="ExitButtonClick"></asp:LinkButton>
这是 JavaScript 函数:
<script type="text/javascript">
function confirmExit() {
bootbox.confirm("Are you sure?", function (confirmed) {
return confirmed;
});
}
</script>
问题是,据我所知, bootbox.confirm 是异步工作的,并且后面代码上的 ExitButtonClick 函数是在不等待用户确认的情况下执行的。
我找到了一个有效的解决方案,使用隐藏按钮:
<asp:LinkButton runat="server" ID="btExit" Text="Exit"></asp:LinkButton>
<asp:Button runat="server" ID="btExitHidden" onclick="ExitButtonClick" style="display:none;" />
这是 javascript 部分:
<script type="text/javascript">
$("#btExit").click(function (e) {
e.preventDefault();
bootbox.confirm("Are you sure?", function (confirmed) {
if (confirmed) {
$("#btExitHidden").click();
}
});
});
</script>
我的问题是是否有一种更“漂亮”和“标准”的方式与 Bootbox.confirm 同步工作,而不使用隐藏按钮。
您可以通过以下方式创建自定义同步引导箱功能:
function ayncBootbox(message, cb = null) { // cb : function
return new Promise(resolve => {
bootbox.confirm({
message: message,
buttons: {
confirm: {
label: "Yes"
},
cancel: {
label: "No"
}
},
callback: cb ? result => cb(resolve, result) : result => resolve(result)
})
})
}
那么如果您需要做一些额外的事情,您可以通过传递自定义回调来调用它
var result = await ayncBootbox("message", (resolve, result) => resolve(result))
Or just
var result = await ayncBootbox("message")
PS:不要忘记将调用者函数设置为异步:),如果需要,您可以使用拒绝来扩展此代码
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)