Javascript 为什么UpdatePanel中的按钮不';t在第一次之后执行JQuery事件

Javascript 为什么UpdatePanel中的按钮不';t在第一次之后执行JQuery事件,javascript,jquery,html,asp.net,updatepanel,Javascript,Jquery,Html,Asp.net,Updatepanel,我有一个按钮(在更新面板中),打开一个弹出窗体,允许我输入一些数据,然后提交执行一些功能(用输入的新数据更新更新面板)并关闭弹出窗口: <asp:HyperLink ID="hlCreateMsg" runat="server" NavigateUrl="JavaScript:void(0);" CssClass="linkOff" ClientIDMode="Static">Create New</asp:HyperLink> <div id="popupCon

我有一个按钮(在
更新面板
中),打开一个弹出窗体,允许我输入一些数据,然后提交执行一些功能(用输入的新数据更新更新面板)并关闭弹出窗口:

<asp:HyperLink ID="hlCreateMsg" runat="server" NavigateUrl="JavaScript:void(0);" CssClass="linkOff" ClientIDMode="Static">Create New</asp:HyperLink>

<div id="popupContact">
    <a id="popupContactClose" title="Close Window">x</a>
    <h3>Add a New Message</h3>
    <div id="dvFirst" class="mainSecond">
        <div id="leftdiv3" class="leftdiv">Client: </div>
        <div id="rightdiv3" class="rightdiv"><asp:DropDownList ID="ddlCliNewMsg" AutoPostBack="false" ClientIDMode="Static" runat="server" CssClass="chosen-select" ></asp:DropDownList></div>
    </div>
    <div id="dvSecond" class="mainSecond">
        <div id="leftdiv4" class="leftdiv">Site: </div>
        <div id="rightdiv4" class="rightdiv"><asp:DropDownList ID="ddlSitNewMsg" AutoPostBack="false" ClientIDMode="Static" runat="server" CssClass="chosen-select"></asp:DropDownList></div>
    </div>
   <div id="dvThird" class="mainSecond">
        <div id="leftdiv5" class="leftdiv">Provider: </div>
        <div id="rightdiv5" class="rightdiv"><asp:DropDownList ID="ddlProNewMsg" AutoPostBack="false" ClientIDMode="Static" runat="server" CssClass="chosen-select"></asp:DropDownList></div>
    </div>
    <div id="dvFourth" class="mainFirst">
        <div id="leftdiv1" class="leftdivspec"><sup style="color: #FF0000; font-weight: bold;">*</sup>Message: </div>
        <div id="rightdiv1" class="rightdivspec"><asp:TextBox ID="tbMessage" ClientIDMode="Static" runat="server" TextMode="MultiLine" Columns="30" Rows="5"></asp:TextBox></div>
    </div>
    <div id="dvFifth" class="mainSecond">
        <div id="leftdiv2" class="leftdiv">Active?</div>
        <div id="rightdiv2" class="rightdiv"><asp:CheckBox ID="cbIsActive" ClientIDMode="Static" runat="server" /></div>
    </div>
    <div style="width: 96%; text-align: right; padding: 2%;">
        <asp:UpdatePanel runat="server" ID="upSubmit" ClientIDMode="Static" UpdateMode="Conditional">
            <ContentTemplate>
                <asp:Button ID="btnSubmit" runat="server" Text="Submit" CssClass="btnExport" ClientIDMode="Static" UseSubmitBehavior="false" OnClick="SubmitAdminMessage" />
            </ContentTemplate>
        </asp:UpdatePanel>
    </div>
</div>
<div id="backgroundPopup"></div>
因此,第一次加载页面时,我单击
hlCreateMsg
链接,弹出窗口出现,我可以输入数据并提交。弹出窗口关闭并更新
UpdatePanel
,同时显示
test
警报窗口。但是每次我打开弹出窗口时(不刷新页面),submit按钮都会更新
UpdatePanel
,但它不会关闭弹出窗口,也不会显示
test
警报

我如何解决这个问题

更新:在查看了一些其他问题后,通过将代码修改为以下内容解决了此问题:

$("#btnSubmit").live('click', function (e) {
        e.preventDefault();

        disablePopup();
    });

但这给了我一个错误:
0x800a01b6-Microsoft JScript运行时错误:对象不支持此属性或方法

如果您更改事件处理程序,使它们使用来自
的委派,则当DOM更改时,它们将继续工作。因此,例如:

$("body").on('click', "#btnSubmit", function (e) {
    alert('test');
    e.preventDefault();

    disablePopup();
});

处理函数实际上不需要更改(通常)。我不确定页面上的哪些元素正在被弹出机制覆盖,但(我很确定)上述转换可以安全地用于任何事件处理程序。

早就不推荐使用
.live()
API。上的
对我也不起作用:/n您必须使用
.on()
.on的三参数版本(“单击”,“按钮”,函数(){})?右-将处理程序挂在
或文档上,如下所示:
$('body')。在('click','btnSubmit',函数(e){…})上-它基本上做了相同的事情
。live()
做了,只是更好。哇,它成功了!!!对于UpdatePanel中的任何事件,我都应该更改为@SearchForkKnowledge是的,通常我发现这是使复杂页面工作的最简单和最干净的方法。我从不知道,但自从我现在知道。。。我会用的。谢谢
$("body").on('click', "#btnSubmit", function (e) {
    alert('test');
    e.preventDefault();

    disablePopup();
});