ASP.NET jQuery AutoComplete - 首次搜索后文本框无响应

时间:2009-07-09 19:38:05

标签: asp.net jquery autocomplete

到目前为止,我在本网站的其他问题中找不到同样的问题。这就是我所遇到的:

我有一个带有UpdatePanel的ASP.NET WebForms应用程序,其中包含一个搜索区域,我有一个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 个答案:

答案 0 :(得分:10)

我认为您遇到了ASP.NET UpdatePanel控件和jQuery的经典问题。问题如下:jQuery代码(在你的情况下它是自动完成的,但它可以是任何东西)在页面加载时工作正常,但它在部分回发后停止工作。如果是这种情况,那么在使用带有UpdatePanel控件的jQuery时需要了解一些事项。

首先,$(document).ready中定义的所有事件绑定在第一次部分回发后停止工作(我假设你的按钮点击导致部分回发)。这就是ASP.NET的工作方式。那么你如何解决它?那么,有几种方法可以解决这个问题。典型的建议是将$(document).ready替换为ASP.NET AJAX自己的 pageLoad 事件。这可能会解决一个问题,但它很可能会导致更多问题,因为现在您将在每个部分回发上绑定事件,从而导致在单个事件上重复执行事件处理程序。在执行任何绑定之前,您可以通过为选择器调用取消绑定来解决一些问题。对于简单的事件绑定,您可以继续使用$(document).ready和 live 函数(而不是单击,悬停等)。

我没有使用UpdatePanel的jQuery插件,所以我不能确定你需要做什么,但是一旦你理解了发生了什么,就不难找到正确的方法。要了解有关此问题和可能解决方案的更多信息,请阅读Dave Ward的文章$(document).ready() and pageLoad() are not the same!(该文章包含几个示例)。

答案 1 :(得分:1)

我建议您使用像Firebug这样的工具,使用它可以确定错误发生的位置。您可以监视ajax请求,查看它是否实际上已停止发出请求,是否完全通过,以及您获得了什么响应。您还可以使用它在运行时调试javascript,它通常会为您提供您可能没有注意到的错误消息。听起来就像你目前需要的工具。