这是我的设置:
我在页面上有一个 asp.net 按钮——
<asp:Button id="btnSelectEmp" runat="server" Text="Select Employee" />
我有一个带有以下 jQuery 点击事件的 .js 文件——
$("input[id$='_btnSelectEmp']").click(function ($e) {
$("div[id$='_divEmpSearch']").css("display", "inline");
$e.preventDefault();
});
如您所见,单击该按钮将设置一个可见的 div。没什么特别的; 不是火箭科学。
div 包含一个 asp.net 更新面板,它包含一个 asc.net 用户控件 (.ascx)
<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<div id="divEmpSearch" runat="server" style="display: none;">
<uc:EmpSearch ID="ucEmpSearch" runat="server" />
</div>
// And a bunch of other controls that are updated according to whatever the user selects in the user control above
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="ucEmpSearch" />
</Triggers>
</asp:UpdatePanel>
上面的用户控件也包含在一个 asp.net 更新面板中,因为它必须与服务器通信。在文本框等其他控件中,用户控件上有两个按钮:1)执行回发的 asp.net 按钮和 2)执行异步回发的 asp.net 按钮。
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Button ID="btnSearch" runat="server" Text="Search" OnClick="btnSearch_Click" /
<br />
asp:Button ID="btnContinue" runat="server" Text="Select" OnClick="btnContinue_Click" />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnSearch" EventName="Click" />
<asp:PostBackTrigger ControlID="btnContinue" />
</Triggers>
</asp:UpdatePanel>
用户控件中执行回发的按钮效果很好。我单击它,回发发生并且我的 div 控件被重新隐藏。然后我可以单击 Select Employee 按钮(我在问题的第一个提供代码的那个),jQuery click 事件被处理并且 div 将被重新显示。
但是,执行异步回发的用户控件中的按钮也可以工作,但是在隐藏 div 之后,如果我然后单击 Select Employee 按钮,则不会处理 jQuery click 事件。
这告诉我,由于某种原因,在异步回发到页面期间,Select Employee 按钮发生了一些事情,因此不再发生 jQuery click 事件。为什么?