所选索引已在Javascript中更改
我有一个带有值的下拉列表所选索引已在Javascript中更改,javascript,jquery,arrays,drop-down-menu,Javascript,Jquery,Arrays,Drop Down Menu,我有一个带有值的下拉列表等级 ["a", "b", "c"] 更改下拉列表的选择时,应加载Student下拉列表的值 when "a" is selected, Dropdown students should populate ["Anna", "Hannah"] When "b" is selected, Dropdown students should populate ["Billy", "Cathy"] When "c" is selected, Dropdown students
等级
["a", "b", "c"]
更改下拉列表的选择时,应加载Student
下拉列表的值
when "a" is selected, Dropdown students should populate ["Anna", "Hannah"]
When "b" is selected, Dropdown students should populate ["Billy", "Cathy"]
When "c" is selected, Dropdown students should populate ["Albert", "Deepti"]
我们能把所有的成绩和学生放在一个数组中(js文件中)吗?如果是,如何从数组中仅加载javascript中更改的选定索引上的值
要添加到描述中,我的代码是HTML,因此我的控件是:
<select id="grade" name="grade"></select>
<select id="student" name="student"></select>
要加载下拉列表,请执行以下操作:
for (var _i = 0; _i < grades.length; _i++) {
jQ('#Stu_Grades').append(jQ("<option></option>").attr("value", _i).text(grades[_i][grades_rank]));
}
for (var i=0;i<studentsByGrade.length;i++) {
if ($("#grade option[value='+"studentsByGrade[i].grade"+']").length === 0) {
$("#grade").append("<option value='"+studentsByGrade[i].grade+'>"+studentsByGrade[i].grade+"</option>");
}
}
$("#grade").on('change', function() {
var grade = this.value;
students.innerHTML = "";
for (var i=0;i<studentsByGrade.length;i++) {
if (studentsByGrade[i].grade == grade) {
$("#student").append("<option value='"+studentsByGrade[i].name+'>"+studentsByGrade[i].name+"</option>");
}
}
});
for(var\u i=0;\u i
使用对象:
var grades = {
a: ["Anna", "Hannah"],
b: ["Billy", "Cathy"],
c: ["Albert", "Deepti"]
}
当下拉列表值更改时,使用其新值查找要使用的名称:
grades[a]; // ["Anna", "Hannah"]
grades[b]; // ["Billy", "Cathy"]
当所有这些都说了又做了之后,它可能会像下面这样:
// Lookup chart for grades and students
var grades = {
a: ["Anna", "Hannah"],
b: ["Billy", "Cathy"],
c: ["Albert", "Deepti"]
}
// Reference our dropdown lists
var grade = document.getElementById("grade");
var student = document.getElementById("student");
// Add an event handler to the 'change' event on our grades
grade.addEventListener("change", function(){
// A few variables we'll use
var option, g, c, i;
// Clear student list
while ( c = student.firstChild ) student.removeChild( c );
// If the new value is a grade in our lookup
if ( g = grades[ this.value ] ) {
// Populate student list
for ( i = 0; i < g.length; i++ ) {
option = document.createElement("option");
option.text = g[i];
student.appendChild(option);
}
}
}, false);
//年级和学生查找表
风险值等级={
答:[“安娜”、“汉娜”],
b:[“比利”、“凯西”],
c:[“阿尔伯特”、“迪普蒂”]
}
//参考我们的下拉列表
var等级=document.getElementById(“等级”);
var student=document.getElementById(“学生”);
//将事件处理程序添加到我们成绩的“更改”事件中
grade.addEventListener(“更改”,函数(){
//我们将使用几个变量
var期权,g,c,i;
//清除学生名单
而(c=student.firstChild)student.removeChild(c);
//如果新值是查找中的一个等级
如果(g=等级[此值]){
//填充学生列表
对于(i=0;i
如果你真的只想要一个数组,你可以把它们都放在一个对象数组中
var studentsByGrade = [
{ "grade": "a", "name": "Anna" },
{ "grade": "a", "name": "Hannah" },
{ "grade": "b", "name": "Billy" },
{ "grade": "b", "name": "Cathy" },
{ "grade": "c", "name": "Albert" },
{ "grade": "c", "name": "Deepti" }
];
使用此选项填充#坡度下拉列表:
for (var _i = 0; _i < grades.length; _i++) {
jQ('#Stu_Grades').append(jQ("<option></option>").attr("value", _i).text(grades[_i][grades_rank]));
}
for (var i=0;i<studentsByGrade.length;i++) {
if ($("#grade option[value='+"studentsByGrade[i].grade"+']").length === 0) {
$("#grade").append("<option value='"+studentsByGrade[i].grade+'>"+studentsByGrade[i].grade+"</option>");
}
}
$("#grade").on('change', function() {
var grade = this.value;
students.innerHTML = "";
for (var i=0;i<studentsByGrade.length;i++) {
if (studentsByGrade[i].grade == grade) {
$("#student").append("<option value='"+studentsByGrade[i].name+'>"+studentsByGrade[i].name+"</option>");
}
}
});
for(变量i=0;iI已添加到说明中。将添加更多。嗨,我尝试了该代码并已在“修改”部分下添加。此处grades.length值未定义,但grades正在从数组中提取正确的值(使用add watch进行检查)。在这种情况下,如何填写第一个下拉列表?@RMNgrades
是一个对象,没有length
属性。若要迭代它,请使用for(grades in grades){}
,如果这是您希望执行的操作。如果将用于循环,则grade
将保留键(类似于“a”、“b”或“c”)然后grades[grade]
将保存值(就像数组一样)。我喜欢对象数组,但是使用@JonathanSampson这样的设置难道没有意义吗?显然,如果它们需要存储的不仅仅是一个名称列表,它们仍然可以执行var grades={a:{“name”:[],“other”:“stuff”},b:{“name”:[],“other”:“which,等等。};
可能,但RMN要求一个数组;)是的,但谁知道这是否是必需的。虽然你是对的,你的回答符合问题的具体要求,但问题的设计可能并不总是最好的。再说一次,你的答案很好:)我只是想指出我同意,最好给出需要的答案,而不是应得的答案。