Я пытаюсь написать JQuery, используя плагин AutoComplete, чтобы отобразить список имен для пользователя, когда пользователь начинает вводить имена (см. Код ниже). Код работает нормально, если пользователь не запускает backspace, чтобы изменить имя введенного пользователя, что заставляет его записывать новые значения поверх существующих в результатах автозаполнения. Есть ли что-то, что я делаю не так, может быть, с помощью функции keyup, чтобы запустить автозаполнение, или есть какой-то способ очистить существующие результаты автозаполнения, если пользователь начинает резервное копирование?
Вот код JQuery в файле разметки в Default.aspx:
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script type="text/javascript" src="js/jquery-1.3.2.js" ></script>
<script type="text/javascript" src="js/jquery.autocomplete.js" ></script>
<script type="text/javascript">
$(document).ready(function() {
$("#example").keyup(function() {
$.ajax({
type: "POST",
url: "Default.aspx/GetCustomerNames",
data: "{ searchParam: '" + $("#example").val() + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
$("#example").autocomplete(msg.d,
{ scroll: false, max: 10, width: 250, selectFirst: true });
}
});
});
});
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
Customer Name: <input id="example" autocomplete="off" type="text" />
</div>
</form>
</body>
</html>
А вот код в моем файле code.hp.aspx.cs, возвращающий данные:
[WebMethod]
public static string[] GetCustomerNames(string searchParam)
{
List<string> data = new List<string>() { "Andrew", "Ramona", "Russ", "Russell", "Raymond", "Annette", "Anthony" };
List<string> names = new List<string>();
foreach (string s in data)
{
if (s.ToLower().StartsWith(searchParam))
{
names.Add(s);
}
}
return names.ToArray();
}