我见过其他解决方案,例如 this一个非常简单但如果 javascript 函数不只是 confirm('sure?');
呢?我永远不知道它什么时候会返回 bool 值。
所以我决定像这样实现所有我的 ASP.NET 按钮:
<button id="btnDelete" name="btnDelete" class="btn">Delete</button>
<asp:Button ID="_btnDelete" runat="server" OnClick="_btnDelete_Click" style="display:none;" />
$('#btnDelete').click(function (e) {
$.blockUI({ message: $('#divConfirmDeleteModal'), overlayCSS: { cursor: 'default' }, css: { cursor: 'default' }, baseZ: 5555 });
return false;
});
$('#btnDeleteYes').click(function () {
$('#<%=_btnDelete.ClientID%>').trigger('click');
});
$('#<%=_btnDelete.ClientID%>').click(function (e) {
// the delay happens here. if i put an alert here, it fires,
// but then the page just loads until eventually the method gets called
<%= ClientScript.GetPostBackEventReference(_btnDelete, string.Empty) %>;
});
..直到现在,它运行良好了一段时间。我在 IE(甚至版本 10)中遇到问题 - _btnDelete_Click
在单击最终触发它的按钮后最多需要 2 分钟才能被调用。
感觉太hacky了,想知道有没有更好的方法。
编辑: here是另一种“正确”的方法,但我希望能够使用更高级的模态对话框并在单击"is"时返回 true,而不是使用浏览器的 native 确认对话框。
edit2:我想我想问的是,有没有办法为执行不止一件事的 OnClientClick 函数返回 bool 值
最佳答案
如果您在客户端脚本中手动触发点击事件,您的应用程序将无法使用移动浏览器的 Go 按钮正常运行。
下面是如何拦截按钮的服务器端点击事件,而无需在客户端手动触发它。
<script type="text/javascript">
function clientClick() {
if (confirm("Are you sure you want to delete?")) {
// Do something at client side before posting back to server
return true;
}
return false;
}
</script>
<asp:Button runat="server" ID="DeleteButton" Text="Delete"
OnClick="DeleteButton_Click" OnClientClick="return clientClick();" />
您可以使用 ASP.Net MVC 做很多花哨的事情。然而,它们在传统的 ASP.Net 中产生了很多问题。
关于javascript - 拦截按钮回发的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17578379/