我有这个让自动完成:
jQuery(function($) {
$("input[type='text']").autocomplete();
$("input[type='text']").keyup(function(event) {
var $this = $(this);
var id = $this.attr('name');
var params = {'id': id, 'partial': $this.val()};
var jsonParams = JSON.stringify(params);
$.ajax({
type: "POST",
url: "MyPage.aspx/GetAutoCompleteList",
data: jsonParams,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
$this.autocomplete('option','source', JSON.parse(msg.d));
}
});
});
});
以及一种称呼方式:
[WebMethod]
public static String GetAutoCompleteList(string id, string partial)
{
AutoCompleter completer;
switch (id)
{
case "first-name":
completer = first_names;
break;
case "last-name":
completer = last_name;
break;
case "site":
completer = site_numbers;
break;
case "institution":
completer = institutions;
break;
// ....
default:
return "[]";
}
return jsSerializer.Serialize(toUse.CloseMatches(partial));
}
AutoCompleter
只找到一些可能的匹配并将它们作为数组返回。
我遇到了问题,因为我不确定如何实际识别输入。这是一个例子:
<asp:TextBox runat="server" name="first-name" id="first-name" AutoPostBack="true"></asp:TextBox>
但$this.attr('name')
无法返回first-name
。相反,它是一些自动生成的ASP.NET废话。什么是明确识别此输入的简单方法?
我的意思是,我们可以这样做:
<div class="hacky" name="first-name" style="display:none"></div>
<asp:TextBox ... ></asp:TextBox>
和
var id = $this.siblings(".hacky").attr('name');
但必须有一种更简单的方法。
答案 0 :(得分:2)
ClientIDMode =“静态”
如果您有很多,可以在web.config中使用静态ID。
您可以使用一些自定义属性,例如attr-data-id =(AspControll).ClientID