当我使用 for 循环和 json 对象填充下拉列表时,它会在最后的下拉列表中添加未定义的选项。
for (var i in PriceRanges[purpose]) {
var r = PriceRanges[purpose][i];
html += '<option value="' + r.id + '">' + r.text + '</option>';
}
PriceRanges 是我的 json 对象。感谢您提前提供任何帮助。
当我使用 for 循环和 json 对象填充下拉列表时,它会在最后的下拉列表中添加未定义的选项。
for (var i in PriceRanges[purpose]) {
var r = PriceRanges[purpose][i];
html += '<option value="' + r.id + '">' + r.text + '</option>';
}
PriceRanges 是我的 json 对象。感谢您提前提供任何帮助。
只需检查像这样的未定义,然后添加
for (var i in PriceRanges[purpose])
{
var r = PriceRanges[purpose][i];
if (typeof r != "undefined")
{
if (typeof r.id != "undefined"
&& typeof r.text != "undefined")
html += '<option value="' + r.id + '">' + r.text + '</option>';
}
}
那是因为你还没有定义var html ,它将等于 undefined .. 所以当你将它附加到字符串时, undefined 仍然在连接的字符串中 ..
所以试试这个
var html = '';
for (var i in PriceRanges[purpose]) {
var r = PriceRanges[purpose][i];
html += '<option value="' + r.id + '">' + r.text + '</option>';
}
这应该可以解决您的问题....
为了安全起见,您应该始终for in
检查循环中任何密钥的财产所有者:
for (var i in PriceRanges[purpose])
{
if (PriceRanges[purpose].hasOwnProperty(i))
{
html += '<option value="' + PriceRanges[purpose][i].id + '">'
+ PriceRanges[purpose][i].text + '</option>';
}
}
但这在我看来确实像您正在迭代一个数组,在这种情况下: use for
, not for in
,因为数组的最后i
一个for in
将是 length 属性......
for (var i=0;i<PriceRanges[purpose].length;i++)
{
html += '<option value="' + PriceRanges[purpose][i].id + '">'
+ PriceRanges[purpose][i].text + '</option>';
}
当然,为了更加安全,你应该在两个循环中添加一个 if :
if (PriceRanges[purpose][i].id && PriceRanges[purpose][i].text)
避免使用不存在的属性(因此将返回未定义)
我认为使用 jQuery 的 each 函数可以控制集合
var html = "";
$.each(PriceRanges.sale, function() {
html += '<option value="' + this.id + '">' + this.text + '</option>';
});