【发布时间】:2015-09-23 19:20:42
【问题描述】:
基本上,我想用jQuery的自动完成功能来实现一个自动完成的文本框。
我已经设法使用一个简单的名称数组来实现这一点,但是我需要能够在与所选搜索词相对应的隐藏输入字段中存储一个 id。
现在我很困惑,作为一名 php 开发人员,除了简单的 ajax 调用和简单的 jQuery 效果之外,我没有真正的 javascript 经验。
所以 onkeyup 这个函数运行:
function searchProviders(str) {
var availableTags = [];
if (str.length >= 4) {
var term = str;
jQuery.ajax({
url: "/services/search/",
dataType: "jsonp",
data: {
featureClass: "P",
style: "full",
maxRows: 50,
term: term
},
success: function (data) {
jQuery.each(data.results, function (key, data) {
//console.log(data.name);
var obj = {
serviceID: data.ID,
name: data.name
};
availableTags.push(obj);
})
test(availableTags);
}
});
}
}
因此,当我使用 console.log(data.name) 时,我会得到一个我需要的名称的简单列表。当传递给我的其他函数时,它可以正常工作。但是,当尝试通过 i 发送时,我意识到 javascript 不执行关联数组,而是使用“对象”。
因此,我创建了一个带有服务 ID 和名称的 obj,然后将其推送到我的 availableTags 数组中。
此时我的 console.log(availableTags) 是这样的。
现在,通过捕获此信息,我想执行自动完成功能,当用户单击他们想要的项目时,我希望它填充文本框以及使用 id 填充另一个隐藏字段。
测试():
function test(test){
var availableTags = [test];
var Tags = availableTags[0];
var searchTags = []
jQuery.each(Tags, function(key,obj){
jQuery.each(obj, function(key,value){
searchTags.push(value);
});
});
jQuery( "#search" ).autocomplete({
source: searchTags
});
}
好的,现在我的自动完成功能再次起作用,它在下拉列表中显示名称以供选择,这是因为我只将名称添加到 searchTags 中,但是如果他们点击一个名称,我该怎么做也在别处存储对应的id?
【问题讨论】:
-
将密钥和标签重命名为:
label(name)和value(key)。查看小提琴:jsfiddle.net/yu93jux4 -
@GuyT 那将是完美的,只要它可以将标签保留在那里但将值存储在隐藏字段中
标签: javascript jquery ajax autocomplete jquery-autocomplete