丢失jquery委托事件处理程序

当我在GridView中的TextBox中发生更改时,我会做一些事情。所以我:

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

情况是:

   (...)  (...)  (...)   <asp:TextBox ID="txtValore" Text='' runat="server" />   (...)  (...)   (...)  (...)   <asp:TextBox ID="txtValore" Width="90%" Text='' runat="server" />   (...)  (...)  (...)   

渲染如下:

 
(...)
(...)
(...) (This part when Visible=true)
(...) (...) (...) (...) (...) (...)
-1.524,10
(...)
(...)

在第一个GridView中,我还有一个ImageButton,它执行第二个griview数据绑定并切换面板的可见性。在第二个面板中,我在GridView之外有另一个ImageButton,它做了相反的事情。我认为这两个都做了回发,因为我可以看到整个页面被重新加载..现在的行为是,当第一次加载页面时,如果我更改第一个网格TextBox文本,我可以看到警报。 单击ImageButton并切换到第二个面板后,在第二个网格上更改文本时不会触发事件,如果我回到第一个面板,它甚至不再使用第一个面板也不起作用..可能是什么问题?

如果您的“切换面板”按钮取代了当前网格,则需要将其委托给更高级的不变的祖先:

例如document

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

现在读取为…如果任何更改事件冒泡到document ,运行'.mGrid input[id*="txtValore"]'选择器以找到导致它的元素, 然后针对该元素触发该函数。

注意:如果没有其他更近的东西没有改变,那么 document只是你的后备默认值。 不要使用'body'作为样式可能导致它不接收冒泡的鼠标事件。