繁体   English   中英

使用for循环以逗号分隔的值填充选择元素

[英]Populating a select element with comma-separated values using for loop

我有一堆用逗号分隔的值存储为JSON文件中的字符串。 我的目的是拆分这些值以填充基于Selectize.js的select元素。 代码(节选)如下:

var options = {};

var attr_split = data.attributes['Attribute1'].split(",");

var options_key;

for (var i = 0; i < attr_split.length; i++) { 
    options_key = attr_split[i]
    }

var options_values = {
    value: options_key,
    text: options_key,
    }

    if (options_key in options)
        options_values = options[options_key];
    options[options_key] = options_values;

$('#input').selectize({
    options: options,
});

尽管这似乎可行,但是select元素中的输出仅显示了for循环完成的最后一次迭代。 根据这里这里 ,我尝试了

for (var i = 0; i < attr_split.length; i++) { 
    var options_key += attr_split[i]
    }

但这会向我抛出未定义加上所有串联字符串(不带分隔符),如以下示例所示:

undefinedAttr1Attr2Attr3

当我使用数组元素的手动输入简单地测试循环时,一切看起来都很好:

for (var i = 0; i < attr_split.length; i++) { 
    var options_key = attr_split[0] || attr_split[1] || attr_split[2]
    }

但这不是可行的方法,因为每个字符串的元素数量不同。

对我在这里做错的任何想法吗? 我觉得这很简单:)

当声明“options_key”,您没有初始化it.so它的值是undefined 。当您连接options_key += attr_split[i]在第一次迭代options_key保持undefined 。所以只有你正在undefinedAttr1Attr2Attr3

所以像这样声明和初始化options_key

var options_key="";

在你的循环中

for (var i = 0; i < attr_split.length; i++) 
{ 
     options_key = attr_split[i]
}

每次将options_key替换为attr_split[i]值时,因此循环后它将包含最后一个元素值。

for (var i = 0; i < attr_split.length; i++) 
{ 
    options_key += attr_split[i]
}

只需更改var options_key; var options_key="";

之所以未定义,是因为您没有正确定义变量。

这是一个有效的例子

 var attr_split = "1,2,3,4".split(",");

var options_key="";

for (var i = 0; i < attr_split.length; i++) { 
    options_key += attr_split[i]
    }

    alert(options_key);
var options_values = {
    value: options_key,
    text: options_key
}
alert(options_values);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM