На моей основной странице у меня есть текстовое поле.
<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";
}
Когда я запускаю свое приложение, я получаю ссылку на объект не ошибка набора.
Скажите мне, где я должен изменить свой код.
Чтобы получить доступ к элементу с помощью селектора идентификатора, внутри контейнера именования вы должны использовать ClientID, а в файле js вы не сможете его использовать. Так что лучше попытаться получить элемент, используя имя класса, что-то вроде
$("input:text.searchtxtbox")
Вам нужно вызвать FindControl на странице Master :
TextBox SearchTextBox = MasterPage.FindControl("SearchTextBox") as TextBox;
чтобы получить доступ к элементу с помощью селектора id, внутри контейнера именования нужно использовать ClientID, а в js-файле вы не сможете его использовать. Поэтому лучше попытаться получить элемент, используя имя класса, что-то вроде
$("input:text.searchtxtbox")
link