我有一个包含大约1000个学生姓名的大型javascript数组。 每个数组元素都以学生ID号作为键,学生将其命名为其值。 它看起来像这样:
student_array['2312'] = 'Bloggs, Joe';
student_array['332'] = 'Carter, John';
student_array['9423'] = 'Davies, David';
等等。
如您所见,数组是按数组值的顺序创建的。然后,我通过迭代数组创建一个选择框,并为每个值创建一个选项,其中数组键是选项值,选项值是数组值。
这是我用于创建选择框的JavaScript:
var student_select = '<select name="student_id" id="student_id">';
for(x in students_array)
{
student_select += '<option ' + (student_id==x ? 'selected="selected"' : '') + ' value="' + x + '">' + students_array[x] + '</option>';
}
student_select += '</select>';
在Internet Explorer(8)中,此工作正常,选择框显示按值排序的选项。
在Chrome中,它按键排序。这是不可取的,因为它使搜索名称变得不可能。
问题: 如何通过数组值强制执行chrome命令?
答案 0 :(得分:3)
在for..in语句中迭代元素的顺序是未定义的。 IE碰巧按照添加的顺序返回它们,而Chrome恰好对类似数字的键进行了一些优化,因此它以数字顺序返回它们。
如果订单对您很重要,您应该使用数组(并正确使用它)。
我的建议:
var student_array = [
{ id : 2312, name : 'Bloggs, Joe' },
{ id : 332, name : 'Carter, John' },
{ id : 9423, name : 'Davies, David' }
];
var student_select = '<select name="student_id" id="student_id">';
for (var i=0; i<student_array.length; i++) {
student_id = student_array[i].id;
student_name = student_array[i].name;
student_select += '<option ' + (student_id==x ? 'selected="selected"' : '') + ' value="' + student_id + '">' + student_name + '</option>';
}
student_select += '</select>';