2014-11-14 113 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',因爲造型可能導致它不能接收冒泡的鼠標事件。

相關問題