Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
所选索引已在Javascript中更改_Javascript_Jquery_Arrays_Drop Down Menu - Fatal编程技术网

所选索引已在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进行检查)。在这种情况下,如何填写第一个下拉列表?@RMN
grades
是一个对象,没有
length
属性。若要迭代它,请使用
for(grades in grades){}
,如果这是您希望执行的操作。如果将
用于
循环,则
grade
将保留键(类似于“a”、“b”或“c”)然后
grades[grade]
将保存值(就像数组一样)。我喜欢对象数组,但是使用@JonathanSampson这样的设置难道没有意义吗?显然,如果它们需要存储的不仅仅是一个名称列表,它们仍然可以执行
var grades={a:{“name”:[],“other”:“stuff”},b:{“name”:[],“other”:“which,等等。};
可能,但RMN要求一个数组;)是的,但谁知道这是否是必需的。虽然你是对的,你的回答符合问题的具体要求,但问题的设计可能并不总是最好的。再说一次,你的答案很好:)我只是想指出我同意,最好给出需要的答案,而不是应得的答案。