Javascript 正在丢失jquery委托事件处理程序

Javascript 正在丢失jquery委托事件处理程序,javascript,c#,jquery,asp.net,gridview,Javascript,C#,Jquery,Asp.net,Gridview,当GridView中的文本框发生更改时,我必须做一些事情。。因此,我: $(function () { $('.mGrid').on('change', 'input[id*="txtValore"]', function () { alert('CHANGE!!'); (...) }); }); 情况是: <asp:UpdatePanel ID="FlussiPagamento" runat="server" UpdateMode="Co

当GridView中的文本框发生更改时,我必须做一些事情。。因此,我:

$(function () {
    $('.mGrid').on('change', 'input[id*="txtValore"]', function () {
        alert('CHANGE!!');
        (...)
    });
});
情况是:

<asp:UpdatePanel ID="FlussiPagamento" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        (...)
        <asp:Panel ID="pnlHome" runat="server">
            (...)
            <asp:GridView ID="gridPrincipale" CssClass="mGrid">
                (...)
                <asp:TemplateField> 
                    <ItemTemplate>
                        <asp:TextBox ID="txtValore" Text='<%# string.Format("{0:N}", Eval("Valore"))%>'
                        runat="server"  />
                    </ItemTemplate>
                </asp:TemplateField>
                (...)
            </asp:GridView>
            (...)
        </asp:Panel>
        <asp:Panel ID="pnlDettaglio" Visible="false" runat="server">
            (...)
            <asp:GridView ID="grid" CssClass="mGrid">
                (...)
                <asp:TemplateField> 
                    <ItemTemplate>
                        <asp:TextBox ID="txtValore" Width="90%" Text='<%# string.Format("{0:N}", Eval("Valore"))%>' runat="server"  />
                    </ItemTemplate>
                </asp:TemplateField>
                (...)
            </asp:GridView>
            (...)
        </asp:Panel>
        (...)
    </ContentTemplate>
</asp:UpdatePanel>

(...)
(...)
(...)
(...)
(...)
(...)
(...)
(...)
(...)
(...)
呈现如下:

<div id="ctl00_MainContent_UpdatePanelID">
    (...)
    <div id="ctl00_MainContent_pnlHome">
        <table class="mGrid" id="ctl00_MainContent_gridPrincipale">
            (...)
            <tr>
                <td>
                    <input name="ctl00$MainContent$grdFlusso$ctl02$txtValore" type="text" value="1.920.442,73" id="ctl00_MainContent_gridPrincipale_ctl02_txtValore" />
                </td>
            </tr>
        </table>
    </div>
    (...)
    (This part when Visible=true)
    <div id="ctl00_MainContent_pnlDettaglio">
        (...)
        <table class="mGrid" id="ctl00_MainContent_grid">
            <tbody>
                (...)
                <tr>
                    (...)
                    <td>
                        <input name="ctl00$MainContent$grid$ctl03$txtValore" value="1.693,44" id="ctl00_MainContent_grid_ctl03_txtValore" onchange="test(this.id)" type="text">
                    </td>
                    <td>
                        <input name="ctl00$MainContent$grid$ctl03$txtRicalcolato" value="169,34" id="ctl00_MainContent_grid_ctl03_txtRicalcolato" onchange="test(this.id)" type="text">
                    </td>
                    (...)
                    <td>
                        <span id="ctl00_MainContent_grid_ctl03_lblDelta">-1.524,10</span>
                    </td>
                    (...)
                </tr>
                (...)
            </tbody>
        </table>
        (...)
    </div>
    (...)
</div>

(...)
(...)
(...)
(此部分可见时=真)
(...)
(...)
(...)
(...)
-1.524,10
(...)
(...)
(...)
(...)
在第一个GridView中,我还有一个ImageButton,它执行第二个GridView数据绑定并切换面板可见性。在第二个面板中,我有另一个ImageButton,在GridView之外,它执行相反的操作。。我想这两个都是回发的,因为我可以看到整个页面都被重新加载了。。现在的行为是,当第一次加载页面时,如果我更改第一个网格文本框文本,我可以看到警报。单击ImageButton并切换到第二个面板后,在第二个网格上更改文本时不会触发该事件,如果我返回到第一个面板,它将不再工作,即使第一个面板也是如此。。有什么问题吗?

如果您的“切换面板”按钮替换了当前网格,则需要将其委托给更高的非更改祖先:

e、 g.
文件

$(function () {
    $(document).on('change', '.mGrid input[id*="txtValore"]', function () {
        alert('CHANGE!!');
        (...)
    });
});
这现在读作。。。如果在
文档
中出现任何更改事件,请运行
'.mGrid输入[id*=“txtValore”]
选择器以查找导致该事件的元素,然后针对该元素启动函数

注意:
文档
只是您的备用默认值,如果没有其他东西是接近的,则不会更改。不要使用
“body”
,因为样式设置可能会导致它不接收冒泡鼠标事件