由于my_field_name
是select
元素的 jQuery 实例,您可以使用children
它来访问它的options
元素:
$.each(my_array, function (k, v) {
my_field_name.children('option[value=' + v + ']').prop("selected", true);
}
...但另见下文。
可能值得注意的是,您的my_array
变量不指向数组。事实上,该行是一个语法错误(因为您在后面使用了逗号"1"
而不是冒号)。(如果您使用了冒号,您将拥有一个带有键"0"
、"1"
和的对象"2"
,但它不会是一个数组。当然,JavaScript 中的标准“数组”根本不是真正的数组,但是...... ) 我想你想要:
var my_array = ["123", "456", "789"];
您也不要$.parseJSON
在不是字符串的东西上使用。
如果 my_array
实际上最终成为一个数组(因为您已经按字面意思编写了它,或者因为它是从像["123", "456", "789"]
.children
// Let's assume you get jsonString from somewhere else, and it's really a string,
// as though you had this code: jsonString = '["123", "456", "789"]'
var my_array = $.parseJSON(jsonString);
$.each($("#my_field_name")[0].options, function(index, option) {
if ($.inArray(option.value, my_array) !== -1) {
option.selected = true;
}
});
options
原始select
DOM 元素上的属性(注意[0]
获取原始元素)是一个具有length
属性的类数组对象,因此$.each
将使用索引对其进行循环。$.inArray
然后将查看option
'svalue
是否存在于数组中。您不需要使用my_field_name
变量缓存查找,因为您只进行一次查找。
但请注意,如果 JSON 字符串是,那将{"0": "123", "1": "456", "2": "789"}
不起作用,因为$.inArray
它不适用于这样的非数组对象。
在下面回复您的评论:
...在您的示例中,您仍在使用 $("#my_field_name") ,这是我试图避免的,因为 $("#my_field_name") 已经缓存在脚本之上,尽管我想使用var 名称,而不是每次我需要引用该字段时重复 $("#my_field_name") 。
如果你已经在做
var my_field_name = $("#my_field_name");
...在代码上方,然后自然在此答案中的任何示例中,如果您看到$("#my_field_name")
,您可以直接将其替换为my_field_name
. 例如,如果您看到:
$.each($("#my_field_name")[0].options, function(index, option) {
and you already have my_field_name
in a variable, you can change it to this;
$.each(my_field_name[0].options, function(index, option) {