Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net jqueryclick消失在某个深渊中_Asp.net_Jquery_Jquery Click Event - Fatal编程技术网

Asp.net jqueryclick消失在某个深渊中

Asp.net jqueryclick消失在某个深渊中,asp.net,jquery,jquery-click-event,Asp.net,Jquery,Jquery Click Event,以下是我的设置: 我在页面上有一个asp.net按钮- <asp:Button id="btnSelectEmp" runat="server" Text="Select Employee" /> 如您所见,单击按钮将设置一个可见的div。没什么特别的;不是火箭科学 div用asp.net更新面板包装,它包含一个asp.net用户控件.ascx <asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Cond

以下是我的设置:

我在页面上有一个asp.net按钮-

<asp:Button id="btnSelectEmp" runat="server" Text="Select Employee" />
如您所见,单击按钮将设置一个可见的div。没什么特别的;不是火箭科学

div用asp.net更新面板包装,它包含一个asp.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控件被重新隐藏。然后,我可以单击selectemployee按钮,我在问题的第一个部分提供了代码,jqueryclick事件被处理,div将被重新显示

但是,用户控件中执行异步回发的按钮也可以工作,但是在它隐藏div之后,如果我单击selectemployee按钮,jqueryclick事件将不会被处理


这告诉我,由于某种原因,在异步回发到页面的过程中,SELECTEMPLOYEE按钮发生了一些事情,因此jQuery click事件不再发生。为什么?

尝试live'click',函数{…}而不是clickfunction{…}

胡乱猜测:{u btSelectEMP被多次使用?

使用live函数。live将click事件委托给父元素,因此在本例中,绑定事件时不需要存在btnSelectEmp元素

$("#<%=btnSelectEmp.ClientID%>").live("click" function ($e) {
  $("#<%=divEmpSearch.ClientID%>").css("display", "inline");
  $e.preventDefault();
});
发生的情况是btnSelectEmp按钮被异步调用替换,并且新元素尚未绑定到事件处理程序


另外,我在这里修改了jquery选择器,以使用元素的确切客户机id。这将提高速度,而且我似乎还记得某些选择器在某些版本的Jquery中不适用于事件委派

当更新面板返回新内容时,按钮将被替换为新按钮,因此:

$("input[id$='_btnSelectEmp']").click(function ($e) {
绑定到它当时找到的元素,而您希望或在此处侦听来自当前和未来元素的单击事件,如下所示:

$("input[id$='_btnSelectEmp']").live("click", function ($e) {
  $("div[id$='_divEmpSearch']").css("display", "inline");
  $e.preventDefault();
});
或者更便宜一点,使用:


在这种情况下,容器应该是更新面板的父级,在回发中不会被替换。

感谢所有在这方面给予我帮助的人。我不熟悉现场直播的听众。它解决了我的问题,再次感谢!
<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>
$("#container").delegate("input[id$='_btnSelectEmp']", "click", function ($e) {
  $("div[id$='_divEmpSearch']").css("display", "inline");
  $e.preventDefault();
});