更新的代码:
由于一些很好的帮助,查询现在显示在选择菜单中。现在我只需要帮助弄清楚如何“使用”与.hospital中所选HosName相对应的对象。例如:我如何实现:
$( '有希望的。')HTML(SPval);
其中SPval是一个JSON值,对应于.hospital中的HosName选择。
来自我原来的帖子:
正如您所看到的,我有一组JSON数据,它们只列出了三个不同状态的多家医院。此外,每家医院在JSON文件中也有一组相关的数据值。目前,用户从选择菜单中选择状态,并且列出了处于相同状态的相应医院,但是我需要列出处于所选状态的所有医院,而不仅仅是一个。
此外,列出的医院需要列为链接,以便用户可以选择要在应用程序中使用的医院,并且所有相关值也可以在以后用作对象。
以下是工作流程摘要:
新代码:
<div>
<select name="state">
<option value="" selected="selected">Select a State</option>
<option value="LA">Louisiana</option>
<option value="TX">Texas</option>
<option value="WI">Wisconsin</option>
</select>
</div>
<select class="hospital"></select>
<p class="hopeful"></p>
var SPval;
var json = {
"hospitals": {
};
$(function () {
$("select[name='state']").change(function () {
var searchName = $("select[name='state']").val();
var matches = $.grep(json.hospitals.facility, function (v) {
return v.State == searchName;
})
var name = $.map(matches, function (v) {
return "<option data-data='" + JSON.stringify( v )+ "'>" + v.HosName + "</option>"
}).join("")
$('.hospital').html(name);
$('.hopeful').html(SPval);
});
});
答案 0 :(得分:1)
你的方法是正确的,但缺少一件事。
$.each(json.hospitals.facility, function(i, v) {
if (v.State == searchName) {
name = v.HosName;
return;
}
});
在每次迭代中,如果州名称等于searchName ,则该值将分配给name
,在下一次迭代时, name`将再次被覆盖,直到循环存在。因此,名称变量总是具有最后一个,因此它只显示一个匹配。
所以创建一个像
这样的全局数组var name = [];
然后在迭代中将每个值推送到它,如
name.push(v.HosName);
答案 1 :(得分:1)
每当匹配时返回第一个值,而是将所有匹配的值添加到数组中,最后附加到div
这是正确的代码:
$("input[type='submit']").click(function() {
var searchName = $("select[name='state']").val();
$('.hospital').html('<ul>')
$.each(json.hospitals.facility, function(i, v) {
if (v.State == searchName) {
$('.hospital').append('<li>'+v.HosName+'</li>');
}
});
$('.hospital').append('</ul>');
});