在您的代码隐藏中,是什么Utils.MessageBox
?(从您的按钮单击事件处理程序调用)。
无论如何,在我看来,您的代码的行为符合设计。脚步:
- 用户点击按钮。
- 回发发生时,服务器端代码在按钮上设置属性,将其配置为显示弹出窗口。
- 页面响应发送回客户端。
- 用户再次单击按钮,现在它显示一个模式(因为它的类已配置)。
您通过发出回发(按钮单击正在调用服务器端事件处理程序)来中断客户端代码流。如何进行流程有几种选择:
- 继续使用回发,但让服务器端代码注册一个“启动”脚本以在 javascript 页面加载事件上执行。不过,这可能有点笨拙,尤其是当用户刷新页面时。
- 让您的按钮单击执行回调而不是回发。有几种不同的方法可以解决这个问题,但我建议不要使用 WebForms
UpdatePanel
方法。
- 将所有这些逻辑移动到客户端。
鉴于您的按钮单击事件处理程序非常简单,我建议您使用第三个选项。所以忘记btnCheckOut
. 从已经设置为的按钮类开始osx ImageButton100
。然后将您的 javascript 点击处理程序更改为更像:
$("input.osx, a.osx").click(function (e) {
e.preventDefault();
var lineCount = $("#txtApprovalNotes").val()
.match(/[^\n]*\n[^\n]*/gi).length;
if (lineCount > 20) {
alert("Approval notes has a limit of 20 lines.";
} else {
$("#osx-modal-content").modal({
overlayId: 'osx-overlay',
containerId: 'osx-container',
closeHTML: '<div class="close">
<a href="#" class="simplemodal-close" style="font-size:150%;">x</a></div>',
minHeight:80,
opacity:65,
position:['0',],
overlayClose:true,
onOpen:OSX.open,
onClose:OSX.close,
appendTo:'form'
});
}
});
这不仅会使维护逻辑流程更简单,而且会减少回发,并使浏览器中的响应更加灵敏。