2014-11-14 67 views
1

我已经做了一些东西时,一个改变occure在TextBox在GridView ..所以我:失去jQuery的委托事件处理程序

$(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> 

在第一个GridView的我也已经,做第二griview数据绑定的ImageButton的和开关面板v isibility ..在第二个面板中,我有另一个ImageButton,在GridView之外,它做了相反的事情。我认为它们都做了回发,因为我可以看到整个页面被重新加载。现在行为是,当第一次加载页面时,如果我更改第一个网格TextBox文本,我可以看到警报。当我点击ImageButton并切换到第二个面板后,当第二个网格上的文本发生变化时,该事件不会被触发,如果我回到第一个面板,即使第一个面板也不再工作。可能是什么问题?

回答

1

如果您的按钮“切换面板”取代目前的网格,你需要委派回一个更高不改变祖先:

例如document

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

这就是现在读作...如果任何改变事件冒泡到document,运行'.mGrid input[id*="txtValore"]'选择地发现,导致它的元素,然后针对该元素的功能。

注:document只是你的后备默认如果没有其他更接近不会改变。不要使用'body',因为造型可能导致它不能接收冒泡的鼠标事件。

相关问题