2013-06-25 40 views
0

我有一個jQuery選擇一個有趣的情況中使用jQuery,試圖找到一個asp.net LoginView內的東西:asp.net控制

說我有4所控制,2純HTML <input> s和2 <asp:TextBox> ES。其中一個在<asp:Loginview>之內。

<asp:LoginView ID="LoginView1" runat="server"> 
    <LoggedInTemplate> 
     <input type="text" id="htmlInput1" /> 
     <asp:TextBox id="aspTextbox1" runat="server"></asp:TextBox> 
    </LoggedInTemplate> 
</asp:LoginView> 

<input type="text" id="htmlInput2" /> 
<asp:TextBox id="aspTextbox2" runat="server"></asp:TextBox> 

然後我們假設我想對它們中的每一個應用一些jquery。猜猜這四個中的哪一個不起作用?

<script> 
     $(function() {    
      $("#htmlInput1").datepicker(); 
      $("#htmlInput2").datepicker(); 
      $("#aspTextbox1").datepicker(); 
      $("#aspTextbox2").datepicker();    
     }); 
</script> 

由於某種原因,LoginView中的asp.net文本框未被觸及。我必須以某種方式首先選擇LoginView?

var x = $("LoginView1")..... 

回答

1

這是因爲服務器端標記在呈現時被賦予唯一標識符。如果你打開頁面的呈現源,你會發現元素的id已被修改爲包含整個控件層次結構。正因爲如此,你的jQuery選擇器將不再找到該元素。

然而,因爲他們總是會年底與指定的ID,您可以使用jQuery的attributeEndsWith選擇:

$('[id$="aspTextbox1"]').datepicker(); 

或者,給所有你想爲datepickerCssClass做到這一點的元素做:

$('.datepicker').datepicker(); 

這可能是一個更清潔,達到同樣的事情不那麼突兀的方式,因爲它可以讓你調用datepicker O法所有這些元素都只有一行代碼。此外,它可以讓你通過簡單地賦予新的元素的同一個班級,而不必每次都修改您的jQuery添加日期選擇器的元素:

<asp:TextBox id="aspTextbox999" CssClass="datepicker" runat="server" /> 
+0

這是快!謝謝! – graph

1

原因是ASP.NET汽車在運行生成ID時間與您嘗試在jQuery中讀取的內容不一樣。打開viewsource並查看生成的ID。您可以使用該ID,否則,如果您使用ASP.NET 4.0或更高版本,我認爲您可以設置ID可預測。閱讀: http://weblogs.asp.net/asptest/archive/2009/01/06/asp-net-4-0-clientid-overview.aspx 對於ASP.NET控件

  $("#"+<%= Control.ClientID %>).val(); 
+0

'ClientIDMode'就是Devesh正在談論的內容。 –