【发布时间】:2019-05-05 17:20:21
【问题描述】:
我正在创建一个网站,其中我正在显示一个网格视图,在它下面我有一个按钮,点击它我想隐藏网页上的所有按钮,直到处理完成。我已经尝试过后面的代码并在 OnClick 函数完成执行后将其隐藏,但我想要的是仅在 OnClick 函数执行时禁用输入。
下面是我的一段代码,
protected void Button2_Click(object sender, EventArgs e)
{
Button b = (Button)sender;
b.Enabled = false;
// processing goes here
}
而我的按钮如下:
<asp:Button ID="Button2" runat="server" CssClass="SyncButton1"
Text="Sync With AMS"
CausesValidation="true" OnClientClick="ShowProgress()"
OnClick="Button2_Click"
Visible="false" />
下面是我的一段JS,
function ShowProgress() {
$("#form1 :input").prop('readonly', true);
var modal = $('<div />');
modal.addClass("modal");
$('body').append(modal);
var loading = $(".loading");
loading.show();
var top = Math.max($(window).height() / 2 - loading[0].offsetHeight / 2, 0);
var left = Math.max($(window).width() / 2 - loading[0].offsetWidth / 2, 0);
loading.css({ top: top, left: left });
}
当我的 OnClick 函数正在执行时,我仍然可以点击暂时不应该发生的按钮。
任何人都可以建议其他方式吗?
【问题讨论】:
-
您与不等待执行的 OnClientClick 处于正确的位置。我认为可能是导致问题的JS,您需要禁用它而不是使其只读。
-
阻塞 DOM 和禁用元素是 ui 问题,在您的代码上,当您单击按钮时,您会调用客户端代码和服务器端代码,因此当单击按钮时,您会立即向服务器发出请求,您的客户端事件变得无用。您应该做的是删除
OnClick="Button2_Click"属性并仅使用OnClientClick,以供您使用。 -
@BinaryDebug 我尝试使用 ("disabled",true) 并且它禁用了所有输入,但是我的服务器端代码没有被命中。
-
@ibubi 我必须去服务器端,因为我的工作与 UI 无关,因此无法在客户端执行所有操作。
标签: javascript c# asp.net gridview webpage