我一直在autoparts网站上工作,我需要在搜索框中自动完成功能。
我已经尝试过的事情:
i)[我尝试使用服务运行ajax扩展器没有运气] ii)[我也试过jquery ui builtin autocomplete插件没有运气]
但经过一天的彻底挣扎后,我终于让它在简单的aspx页面上运行了,但是当我将这段代码用于母版页时,它只是起作用了。
这部分我需要你们:)
//code inside the masterpage head
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js" type="text/javascript"></script>
<script src="scripts/jquery.autocomplete.min.js" type="text/javascript"></script>
<link href="css/jquery.autocomplete.css" rel="stylesheet" type="text/css" />
<script type="text/javascript">
$(document).ready(function() {
$("#ctl00_myTextBox").autocomplete('select.ashx');
});
</script>
//注意:此文本框也位于母版页中,不在任何内容页
中<asp:TextBox ID="myTextBox" runat="server" Width="250" ></asp:TextBox>
//这是httphandler的代码...... //注意:我正在使用LuceneIndexes来检索数据
公共类选择:IHttpHandler {
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "application/javascript";
if (!String.IsNullOrEmpty(context.Request.QueryString["q"]))
{
foreach (string s in GetAutoCompleteValues(context.Request.QueryString["q"]))
{
context.Response.Write(new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(s)+Environment.NewLine);
}
}
}
public static string[] GetAutoCompleteValues(string prefixText)
{
DataTable dt = GetSearchList.GetResult(prefixText);
List<string> RowNames = new List<string>();
foreach (DataRow drow in dt.Rows)
{
RowNames.Add(drow[1].ToString() + " " + drow[2].ToString() + " " + drow[3].ToString() + " " + drow[4].ToString() + " " + drow[5].ToString() + " " + drow[6]);
}
return RowNames.ToArray();
}
public bool IsReusable
{
get
{
return false;
}
}
}
请帮助我提前提出任何有用的建议......
答案 0 :(得分:1)
此问题是因为您不使用动态呈现的控件ID,从您将其放在母版页上的那一刻起,ID就会发生变化。
在您的javascript的这一行中,使用myTextBox.ClientID
:
$("#<%=myTextBox.ClientID%>").autocomplete('select.ashx');
动态呈现控件ID,并让jQuery找到它。