2010-06-14 33 views
1

在我的母版页中我有一个文本框。如何从jquery文件访问母版页文本框?

<asp:TextBox ID="SearchTextBox" runat="server" class="searchtxtbox" onfocus="HideSearchWaterMark();" Text="Search" onblur="ShowSearchWaterMark(this);" /> 

我在代码中加入jQuery的引用后面。

TextBox SearchTextBox = this.FindControl("SearchTextBox") as TextBox; 
      StringBuilder objStringBuilder = new StringBuilder(); 
      objStringBuilder.Append("<script type=\"text/javascript\" language=\"javascript\">\n"); 
      objStringBuilder.AppendFormat("var searchTextBox = '{0}';\n", SearchTextBox.ClientID); 
      objStringBuilder.Append("</script>\n"); 
      this.Page.ClientScript.RegisterClientScriptBlock(GetType(), "RegisterVariables", objStringBuilder.ToString()); 
this.Page.ClientScript.RegisterClientScriptInclude(this.GetType(), "Global", this.ResolveClientUrl("~/Resources/Scripts/Search.js")); 
this.Page.ClientScript.RegisterClientScriptInclude(this.GetType(), "Global", this.ResolveClientUrl("~/Resources/Scripts/jquery-1.4.2.js")); 
this.Page.ClientScript.RegisterClientScriptInclude(this.GetType(), "Global", this.ResolveClientUrl("~/Resources/TagsScripts/jquery.autocomplete.js")); 

在Search.js 我下面的方法来访问母版页的文本框:

$(document).ready(function() { 
      $("#" + searchTextBox).autocomplete("Handlers/GenericHandler.ashx?tgt=12", { 
       multiple: true, 
       multipleSeparator: ";", 
       mustMatch: false, 
       autoFill: true 
      }); 
     }); 


     function HideSearchWaterMark() { 

    var control = $("#" + searchTextBox); 
    if (control[0].className == "searchtxtbox ac_input") 
     control[0].value = ""; 

    control[0].className = "searchtxtbox ac_input"; 
} 

function ShowSearchWaterMark(tagsTextBox) { 
    if (searchTextBox.value.length == 0) { 
     searchTextBox.value = "Search"; 
     searchTextBox.className = "searchtxtbox ac_input"; 
    } 

当我运行我的应用程序我得到的对象引用未设置错误。

请告诉我在哪里需要更改我的代码。

回答

1

为了使用id选择器访问元素,在命名容器中必须使用ClientID,并且在js文件中,您将无法使用它。所以,最好尝试使用类名来获取元素,像

$("input:text.searchtxtbox") 
+1

它的正常工作为我的情景。非常感谢。 – stackuser1 2010-06-17 07:38:01

1

你需要调用的FindControl母版页上:

TextBox SearchTextBox = MasterPage.FindControl("SearchTextBox") as TextBox; 

Have a look here

0

norder访问使用ID元素选择器,在一个命名容器中你必须使用ClientID,并且在一个js文件中你将不能使用它。因此,更好地试图让使用类名,一些元素像

$(“输入:text.searchtxtbox”)

链接