【问题标题】:ASP.NET jQuery AutoComplete - textbox not responding after first searchASP.NET jQuery AutoComplete - 文本框在第一次搜索后没有响应
【发布时间】:2010-11-09 12:19:16
【问题描述】:

到目前为止,我在本网站的其他问题中没有发现同样的问题。以下是我的经历:

我有一个带有 UpdatePanel 的 ASP.NET WebForms 应用程序,其中包含一个搜索区域,其中我有一个用于 jQuery 自动完成的 ASP:TextBox。

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

这一切工作正常,但如果我点击一个 ASP:Button 并为搜索区域处理一些代码,自动完成 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 {}

希望这会有所帮助。暂时我已经向用户隐藏了包含此问题的选项卡。

【问题讨论】:

  • “为搜索区域处理一些代码”?请详细说明。

标签: asp.net jquery autocomplete


【解决方案1】:

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

【讨论】:

  • 我一定会试试 Firebug 看看我得到了什么。谢谢。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-23
    相关资源
    最近更新 更多