2012-04-02 54 views
1

我有一個小問題,我似乎無法使用jquery選擇用戶控件ID。用戶控件是一個消息面板,當動作發生時顯示。所以當頁面加載時這個消息面板不是頁面的一部分。只有當用戶與頁面交互時,即添加消息面板顯示的圖像和消息。使用jquery選擇Asp.net控件

頁面控件

<asp:Panel ID="pan_cntrls" runat="server"> 
    <asp:Button ID="btnAddNewImg" runat="server" Text="Add new image" OnClick="btnAddNewImg_Click" 
     Visible="true" /> 
    <uc9:MessagePanel ID="messagepanel1" runat="server"></uc9:MessagePanel> 
</asp:Panel> 

的Javascript

<script language="javascript" type="text/javascript"> 
    $(document).ready(function() { 
     $("#PageContent_IMG1_messagepanel1_divMessageBox").click(function() { 
      alert("handler called"); 
     }); 
    }); 

什麼螢火顯示

<div class="errorBox confirmation" id="PageContent_IMG1_messagepanel1_divMessageBox" style="height: 50px;"> 

我可以使用jquery選擇其他ID,但不是這個。我還應該指出,我在頁面上使用了一個modalpopuptentender。所以當我提交數據時,頁面正在做回發。我嘗試使用委託,因爲在頁面加載後ID被添加到DOM但它不工作。

任何想法?

感謝

+0

它和jquery選擇器開頭的'##'一樣簡單嗎? - 它應該只是一個'#'嗎? – 2012-04-02 10:20:14

+0

對不起,我粘貼代碼的錯字。 – 2012-04-02 10:22:31

+0

好的。已刪除它。 – 2012-04-02 10:23:04

回答

2

基本上,問題是您要添加處理程序$(document).ready。 divs還不存在,所以這個調用什麼都不做。

您需要在div碰到頁面後附加點擊處理程序。有幾個方法可以做到這一點:

使用add_endRequest,所以異步查詢後執行document.ready代碼:

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function() { 
    $("#PageContent_IMG1_messagepanel1_divMessageBox").click(function() { 
     alert("handler called"); 
    }); 
}); 

或2

明確做一個addHandler函數,並使用asp.net中的注入引發它:

在JS:

function addHandler (ctrlID) { 
    $("#" + ctrlID).click(function() { 
     alert("handler called"); 
    }); 
}; 

在ASP.Net:

使用RegisterStartupScript調用addHandler操作,傳遞需要處理程序添加控件的ClientID。有關RegisterStartupScript的信息,請參見here

這些選項中的第一個比第二個選項效率低(因爲它會在所有回發後執行),但更容易實現。

+0

我沒有在這裏做過,但是你應該使用'<%= divMessageBox.ClientID%>'而不是硬編碼完整的clientID,因爲在你處理頁面中的其他元素時它可能會改變。 – 2012-04-02 10:38:06

+0

感謝這工作!我知道jquery無法看到div,但不知道如何解決這個問題。 – 2012-04-02 10:45:24

0

你可以試試這個

<script language="javascript" type="text/javascript"> 
    $(document).ready(function() { 
     $("#<%=PageContent_IMG1_messagepanel1_divMessageBox.ClientID%>").click(function() { 
      alert("handler called"); 
     }); 
    }); 

這樣,你要確保它的

當ASP.NET呈現服務器端控制這使他們在客戶端的ID獨特的客戶端id與服務器ID不同,如果您不確定,可以查看您的ASP.NET頁面的源代碼

+0

編譯錯誤 說明:編譯服務此請求所需的資源時發生錯誤。請查看以下具體的錯誤細節並適當修改您的源代碼。 編譯器錯誤消息:CS0103:名稱'PageContent_IMG1_messagepanel1_divMessageBox'在當前上下文中不存在 – 2012-04-02 10:29:31

+0

頁面第一次加載時,它不是頁面的一部分。 – 2012-04-02 10:30:04

0

要獲取用戶控件的ID客戶端,你必須設置它的ClientID屬性。