ASP.NET jQuery AutoComplete - текстовое поле не отвечает после первого поиска - PullRequest
5 голосов
/ 09 июля 2009

Пока что я не вижу такой же проблемы в других вопросах на этом сайте. Вот что я испытываю:

У меня есть приложение ASP.NET WebForms с UpdatePanel, содержащим область поиска, где у меня есть ASP: TextBox, который я использую для автозаполнения jQuery.

$(document).ready(function() {
    $("#tabContainer_tabSearchBreaks_txtSearchName").autocomplete("AutoCompleteEmployee.ashx", { minChars: 3, maxItemsToShow: 10 });
});

Все это работает нормально, но если я нажму на кнопку ASP: и обработаю некоторый код для области поиска, javascript с автозаполнением больше не работает.

Есть идеи ???

Должно быть решение для сброса текстового поля для вызова кода js.

[Обновление - больше кода] Вот что кнопка обновления делает для области поиска, отдельной от кода автозаполнения:

 try {
     int employeeID;
     string[] namelst = txtSearchName.Text.Split(new string[] {
         " "
     }, StringSplitOptions.None);
     employeeID = int.Parse(namelst[2].Substring(1, namelst[2].Length - 2));
     string name = namelst[0] + " " + namelst[1];
     var breaks = bh.ListBreaksForEmployeeByDate(employeeID, DateTime.Parse(txtFromDate.Text), txtToDate.Text.Length > 0 ? DateTime.Parse(txtToDate.Text).AddDays(1).AddSeconds(-1) : DateTime.Today.AddDays(1).AddSeconds(-1));

     if (breaks.Count() > 0) {
         lblEmployeeTitle.Text = "Breaks for " + name;
         gridSearchBreaks.DataSource = breaks;
         gridSearchBreaks.DataBind();
     }
 } catch {}

Надеюсь, это поможет. В настоящее время я скрыл вкладку с этой проблемой от пользователей.

Ответы [ 2 ]

10 голосов
/ 14 июля 2009

Мне кажется, у вас классическая проблема с элементами управления ASP.NET UpdatePanel и jQuery. Проблема заключается в следующем: код jQuery (в вашем случае он автозаполняется, но может быть любым) прекрасно работает при загрузке страницы, но перестает работать после частичной обратной передачи. Если это так, вам нужно разобраться с использованием jQuery с элементами управления UpdatePanel.

Во-первых, все привязки событий, определенные в $ (document). Уже перестают работать после первой частичной обратной передачи (и я предполагаю, что нажатие вашей кнопки вызывает частичную обратную передачу). Именно так работает ASP.NET. Так как же это исправить? Ну, есть несколько способов решения этой проблемы. Типичная рекомендация - заменить $ (document) .ready собственным событием ASP.NET AJAX pageLoad . Это может решить одну проблему, но, скорее всего, это вызовет больше проблем, потому что теперь вы будете связывать события при каждой частичной обратной передаче, вызывая повторное выполнение обработчиков событий для одного события. Вы можете решить некоторые проблемы, позвонив unbind для вашего селектора перед выполнением каких-либо привязок. Для простых привязок событий вы можете продолжать использовать $ (document) .ready с функцией live (вместо щелчка, наведения и т. Д.).

Я не использовал плагины jQuery с UpdatePanel, поэтому не могу точно сказать, что вам нужно делать, но как только вы поймете, что происходит, найти правильный подход не составит труда. Чтобы узнать больше об этой проблеме и возможных решениях, прочитайте статью Дэйва Уорда $ (document) .ready () и pageLoad () - это не одно и то же! (статья содержит несколько примеров).

1 голос
/ 09 июля 2009

Я предлагаю вам использовать такой инструмент, как Firebug , с помощью которого вы можете точно определить, где произошла ошибка. Вы можете отслеживать запросы AJAX, чтобы увидеть, действительно ли он прекратил делать запросы, делают ли они это до конца, и какой ответ вы получаете. Вы также можете использовать его для отладки javascript во время выполнения, и он часто дает вам сообщения об ошибках, которые вы могли не заметить иначе. Звучит как инструмент, который вам нужен в данный момент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...