我有一个大型HTML表单,其中包含许多需要帐户自动填充的字段。我使用AccountLookup类标记这些字段,jQuery为自动完成执行脏工作:
$(".AccountLookup").autocomplete({
source: function (request, response) {
$.ajax({
url: "Lookup.asmx/GetAccounts",
data: "{ 'Search': '" + request.term + "' }",
dataType: "json",
type: "POST",
contentType: "application/json; charset=utf-8",
dataFilter: function (data) { return data; },
success: function (data) {
response($.map(data.d, function (item) {
return {
value: item.Value
}
}))
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(textStatus);
}
});
},
minLength: 3
});
现在,当用户从自动填充中选择某些内容时,我需要它在填充标记的输入字段之前填充隐藏字段;可能使用类似的东西:
$(this).prev().val(item.Key);
如何合并此功能?另外,如何强制用户从自动完成中进行选择? (所有值都是预定义的,用户无法添加新值。)
修改 据我所知,在检查DOM时,select选项当前正在填充隐藏的表单字段。
select: function (event, ui) {
$(this).prev().val(ui.item.key);
}
答案 0 :(得分:17)
我知道这是一个老帖子---但我试图解决类似的问题(迫使用户从列表中选择一个项目)遇到它... ...
$("#ac").autocomplete({
source: function (req, resp) {
//add code here...
},
select: function (e, ui) {
$(this).next().val(ui.item.id);
},
change: function (ev, ui) {
if (!ui.item)
$(this).val("");
}
});
答案 1 :(得分:3)
$(".AccountLookup").autocomplete({
/*...*/
}).result(function(event, item) {
$(this).prev().val(item.Key);
});
您还可以使用jQuery validate来确保填充该字段。
答案 2 :(得分:1)
对于强制选择,您可以使用自动填充的"change" event
var availableTags = [
"ActionScript",
"AppleScript"
];
$("#tags").autocomplete({
source: availableTags,
change: function (event, ui) {
if(!ui.item){
//http://api.jqueryui.com/autocomplete/#event-change -
// The item selected from the menu, if any. Otherwise the property is null
//so clear the item for force selection
$("#tags").val("");
}
}
});
答案 3 :(得分:0)
对于选择操作,请尝试使用formatItem
选项。您可以将每个结果格式化为具有将填充其他文本框的onclick事件。
要强制从自动填充中进行选择,您需要使用mustMatch
选项。
http://docs.jquery.com/Plugins/Autocomplete/autocomplete#url_or_dataoptions
答案 4 :(得分:0)
前一段时间我遇到了同样的问题,有些帖子帮助了我。我已经修改了代码,因为我发现有些情况我希望从返回的信息中填写一个或多个字段。在自动填充的选择选项中,我添加了一个功能。
select: function (e, ui) {ReSetField({'txtID':'id','txtPrice':'price' [,etc...]}, ui) }
功能" ResetFields "然后获取与字段名配对的元素名称的JSON列表,并使用字段名匹配ui对象中的元素。然后可以从ui项中提取该值并将其放入html元素中。
function ReSetField(_flds, _vals) {
//Set up the flds to be reset with values passed in.
try {
if (_flds != undefined) {
if ($.type(_flds) == 'string') {
_flds = JSON.parse(_flds);
};
var _fld = null;
var _val = '';
$.each(_flds, function (index) {
if (index.length > 0) {
_fld = '#' + index; //Set the forms field name to set
_val = _flds[index]; //Pick up the field name to set the fields value
$fld = $(_fld);
$fld.val(_vals.item[_val]); //Set the fields value to the returned value
}
}
})
};
}
catch (e) {
alert('Cannot set field ' + _fld + '.');
}
}
坚持使用" 字段列表"将HTML元素作为" 字段列表" 等属性并使用类似" comboBox" 的类,然后我可以使用单个函数查找所有ComboBox元素并在表单上设置自动完成,减少在表单上处理2个或更多查找所需的代码量。