【发布时间】:2014-04-26 10:35:33
【问题描述】:
我有一个在服务器上执行并更改页面的LinkButton。从历史上看,我有一个 confirm 消息框,它执行 OnClientClick 以确保用户想要离开。
到目前为止,它看起来像这样:
ASP.NET:
<asp:LinkButton runat="server" ID="ChangePage" Text="Change page"
OnClientClick="confirm('are you sure you want to change page?');"
OnClick="Navigate" >
Change Page
</asp:LinkButton>
HTML 输出:
<a id="MainContent_ChangePage"
onclick="confirm('are you sure you want to change page?');"
href="javascript:__doPostBack('ctl00$MainContent$ChangePage','')" >
Change page
</a>
这一切都像这样正常工作。问题是我试图用更漂亮的 jQuery-UI 实现替换所有确认框,如下所示:
window.confirm = function (message, obj) {
$('<div/>')
.attr({ title: 'Webpage Confirm'})
.html(message)
.dialog({
resizable: false,
modal: true,
width: 500,
buttons: {
"OK": function () {
__doPostBack(obj, '');
$(this).dialog('close');
return true;
},
"Cancel": function () {
$(this).dialog('close');
return false;
}
}
});
};
我相信这与confirm 对话框同步 运行,而jQuery 对话框异步 出现这一事实有关。但是,我认为设置 modal: true 会导致它等待响应。
如何覆盖 window.confirm 以获得一致的行为?
【问题讨论】:
-
删除
__doPostBack(obj, '');(你的链接会自己做)并做:OnClientClick="return AreYouSure('my message');当然使用AreYouSure函数......不是一个好主意吗?如果你想覆盖confirm方法,你需要跨浏览器,这可能会通过你... -
已更改为
OnClientClick="return AreYouSure('message');",但仍会立即回发。如果我在.dialog()声明之后添加任何代码行,它们会立即执行。所以我认为在“确定”或“取消”功能甚至有机会执行之前,它已经顺利到达服务器。 -
然后使用普通链接,并在代码中的位置调用
__doPostBack并传递 id 名称... - 查看源代码并在模态确认中使用该调用:@ 987654321@
标签: javascript asp.net vb.net jquery-ui