我正在尝试通过JSON数据进行简单搜索,并在select jenu中返回对象的“列表”。想法是询问用户邮政编码。用户将输入邮政编码并单击提交按钮。这将触发一个函数,用于搜索JSON数据中搜索用户在搜索字段中输入的邮政编码。当找到匹配的邮政编码时,邮政编码和相应的JSON数据将作为对象返回,以便稍后在应用程序中使用。感谢您的帮助,以下代码正在运行:
工作示例: http://jsfiddle.net/KmYJw/17/
<div>
<input name="name" value="" type="text" />
<input value="search in json" type="submit" />
</div>
<a href="#">get location</a>
$(function() {
var city;
var json = {
"people": {
"zipcode": [{
"code": "12345",
"city": "Chicago",
"name": "Paul"},
{
"code": "12345",
"city": "New York",
"name": "Mary"}]
}
};
$("input[type='submit']").click(function() {
var searchName = $("input[name='code']").val();
$.each(json.people.zipcode, function(i, v) {
if (v.code == searchName) {
city = v.city;
return;
}
});
return;
});
$('a').click(function(){
alert(city);
});
});
这是我的问题。如您所见,我有两个相同的邮政编码,上面的功能只返回一个警告框中的一个城市。
我需要在选择菜单中显示所有相关城市(还有更多将使用相同的邮政编码添加)。这样,当找到相同邮政编码的更多城市时,用户可以轻松选择从中获取数据所需的城市。
非常感谢任何帮助!
答案 0 :(得分:0)
而不是:
if (v.code == searchName) {
city = v.city;
return;
}
DO 顶级声明:
var cities = [];
点击事件
if (v.code == searchName) {
cities.push(v.city);
}
$('a').click(function(){
alert(cities.join(''));
});
你去的地方:
填充元素的代码:
http://jsfiddle.net/vGSXD/
var cities = ["M1", "M2", "M3"],
citiesNode = document.getElementById('cities'),
option = '';
for (var i = 0, l = cities.length; i < l ; i+=1)
{
option = document.createElement('OPTION');
option.text = cities[i];
citiesNode.appendChild(option);
}
答案 1 :(得分:0)
我不确定你是否理解你想要实现的目标,但看起来你唯一需要的就是将zipcode / cities关系管理成一个数组,而不是在第一次发现时破坏搜索。
$("input[type='submit']").click(function() {
var searchName = $("input[name='code']").val();
var zipNCities=new Array();
$.each(json.people.zipcode, function(i, v) {
if (v.code == searchName) {
//use zipcode in the array for future search by city, where you will have
//multiple zipcodes
zipNCities.push({zipcode: v.code, city: v.city});
}
});
return;
});
$('a').click(function(){
//display cities from the array here.
});