alt 属性不断被分配给嵌套 javascript 对象的最后一个索引
alt attribute keeps getting assigned to last index of nested javascript object
所以我有一系列代表大学 class 的各种 JSON 对象,每个对象中都有嵌套数据。这些对象中的每一个都存储在一个名为 classes 的数组中。下面是一个 class 对象如何格式化的示例:
let class_A = {
professor: "Joey Smith",
numberStudents: 25,
courseCode: "COMS 2360",
seating: {
"FirstRow": {
0: {
firstName: "Sarah",
collegeMajor: "English",
},
1: {
firstName: "Bob",
collegeMajor: "Computer Engineering",
},
2: {
firstName: "Dylan",
collegeMajor: "Mathematics",
}
},
"SecondRow": {
3: {
firstName: "Molly",
collegeMajor: "Music"
}
}
}
};
基本上,我有一个页面,其中所有 class 个对象的所有学生都布置在页面上,每个名字旁边都有一个添加按钮,添加按钮最终将允许我将学生添加到某些组作业等
现在只有 class_A 的页面看起来像这样:
我使用如下代码在每个学生旁边显示了学生姓名和添加按钮:
function loadStudents(){
let page = document.getElementById('page');
page.innerHTML = "";
for(seatRow in class.seating){
for(index in class.seating[seatRow]){
let studentName = class.seating[seatRow][index].studentName;
page.innerHTML += "<p> Name:" + studentName + " <img src='addButImg.png' id = 'addButton' onclick = 'addStudentToGroup()'></p>";
let addButton = document.getElementById("addButton");
addButton.alt = studentName;
console.log(addButton.alt);
}
}
}
function addStudentToGroup(){
let addButton = document.getElementById("addButton");
console.log(addButton.alt);
}
我的页面像图片一样正确显示,但是当我单击学生姓名旁边的添加按钮时,我无法打印我添加到组中的特定学生的姓名。我将添加按钮的 alt 值分配给学生的名字,并通过执行“console.log(addButton.alt)”进行测试,打印出:
Sarah
Bob
Dylan
Molly
如果我点击第一个添加按钮,它应该会触发 addStudentToGroup() 函数并将“Sarah”打印到控制台。但是,无论按钮位于哪个学生旁边,单击所有按钮似乎只会打印学生列表中的姓氏“Molly”。 alt 似乎被保存为最后一个学生的名字,我正在努力根据我选择单击添加的任何学生姓名来更改 alt 值。有谁知道如何解决这一问题?如有任何帮助,我们将不胜感激!
问题是所有按钮都具有相同的 ID“addButton”,因此当您尝试获取 addStudentToGroup 中的按钮时,它会检索具有匹配 ID 的最后一项。
尝试将按钮的引用作为参数发送给 addStudentToGroup:
onclick = 'addStudentToGroup(this)'
尝试以下操作:
let classes = [class_A, class_B, class_C, class_D];
let classesAvailable = document.getElementById('classes');
let class = classes[classesAvailable.value];
function loadStudents(){
let page = document.getElementById('page');
page.innerHTML = "";
for(seatRow in class.seating){
for(index in class.seating[seatRow]){
let studentName = class.seating[seatRow][index].studentName;
page.innerHTML += "<p> Name:" + studentName + " <img src='addButImg.png' id = 'addButton' onclick = 'addStudentToGroup(this)'></p>";
let addButton = document.getElementById("addButton");
addButton.alt = studentName;
console.log(addButton.alt);
}
}
}
function addStudentToGroup(buttonEl){
console.log(buttonEl.alt);
}
您正在为所有图片分配相同的 ID addButton
。
如果你只想要 studentName
那么只需将它传递给 onclick
函数。
比如使用 template literal addStudentToGroup('${studentName}')
let class_A = {professor:"Joey Smith",numberStudents:25,courseCode:"COMS 2360",seating:{"FirstRow":{0:{firstName:"Sarah",collegeMajor:"English",},1:{firstName:"Bob",collegeMajor:"Computer Engineering",},2:{firstName:"Dylan",collegeMajor:"Mathematics",}},"SecondRow":{3:{firstName:"Molly",collegeMajor:"Music"}}}};
loadStudents();
function loadStudents(){
let page = document.getElementById('page');
page.innerHTML = "";
for(seatRow in class_A.seating){
for(index in class_A.seating[seatRow]){
//console.log(class_A.seating[seatRow][index]);
let studentName = class_A.seating[seatRow][index].firstName;
page.innerHTML += `<p> Name: ${studentName} <img src="addButImg.png" onclick = "addStudentToGroup('${studentName}')"></p>`;
//let addButton = document.getElementById("addButton");
//addButton.alt = studentName;
// console.log(addButton.alt);
}
}
}
function addStudentToGroup(sname){
console.log(sname);
}
<div id="page">
</div>
所以我有一系列代表大学 class 的各种 JSON 对象,每个对象中都有嵌套数据。这些对象中的每一个都存储在一个名为 classes 的数组中。下面是一个 class 对象如何格式化的示例:
let class_A = {
professor: "Joey Smith",
numberStudents: 25,
courseCode: "COMS 2360",
seating: {
"FirstRow": {
0: {
firstName: "Sarah",
collegeMajor: "English",
},
1: {
firstName: "Bob",
collegeMajor: "Computer Engineering",
},
2: {
firstName: "Dylan",
collegeMajor: "Mathematics",
}
},
"SecondRow": {
3: {
firstName: "Molly",
collegeMajor: "Music"
}
}
}
};
基本上,我有一个页面,其中所有 class 个对象的所有学生都布置在页面上,每个名字旁边都有一个添加按钮,添加按钮最终将允许我将学生添加到某些组作业等
现在只有 class_A 的页面看起来像这样:
我使用如下代码在每个学生旁边显示了学生姓名和添加按钮:
function loadStudents(){
let page = document.getElementById('page');
page.innerHTML = "";
for(seatRow in class.seating){
for(index in class.seating[seatRow]){
let studentName = class.seating[seatRow][index].studentName;
page.innerHTML += "<p> Name:" + studentName + " <img src='addButImg.png' id = 'addButton' onclick = 'addStudentToGroup()'></p>";
let addButton = document.getElementById("addButton");
addButton.alt = studentName;
console.log(addButton.alt);
}
}
}
function addStudentToGroup(){
let addButton = document.getElementById("addButton");
console.log(addButton.alt);
}
我的页面像图片一样正确显示,但是当我单击学生姓名旁边的添加按钮时,我无法打印我添加到组中的特定学生的姓名。我将添加按钮的 alt 值分配给学生的名字,并通过执行“console.log(addButton.alt)”进行测试,打印出:
Sarah
Bob
Dylan
Molly
如果我点击第一个添加按钮,它应该会触发 addStudentToGroup() 函数并将“Sarah”打印到控制台。但是,无论按钮位于哪个学生旁边,单击所有按钮似乎只会打印学生列表中的姓氏“Molly”。 alt 似乎被保存为最后一个学生的名字,我正在努力根据我选择单击添加的任何学生姓名来更改 alt 值。有谁知道如何解决这一问题?如有任何帮助,我们将不胜感激!
问题是所有按钮都具有相同的 ID“addButton”,因此当您尝试获取 addStudentToGroup 中的按钮时,它会检索具有匹配 ID 的最后一项。
尝试将按钮的引用作为参数发送给 addStudentToGroup:
onclick = 'addStudentToGroup(this)'
尝试以下操作:
let classes = [class_A, class_B, class_C, class_D];
let classesAvailable = document.getElementById('classes');
let class = classes[classesAvailable.value];
function loadStudents(){
let page = document.getElementById('page');
page.innerHTML = "";
for(seatRow in class.seating){
for(index in class.seating[seatRow]){
let studentName = class.seating[seatRow][index].studentName;
page.innerHTML += "<p> Name:" + studentName + " <img src='addButImg.png' id = 'addButton' onclick = 'addStudentToGroup(this)'></p>";
let addButton = document.getElementById("addButton");
addButton.alt = studentName;
console.log(addButton.alt);
}
}
}
function addStudentToGroup(buttonEl){
console.log(buttonEl.alt);
}
您正在为所有图片分配相同的 ID addButton
。
如果你只想要 studentName
那么只需将它传递给 onclick
函数。
比如使用 template literal addStudentToGroup('${studentName}')
let class_A = {professor:"Joey Smith",numberStudents:25,courseCode:"COMS 2360",seating:{"FirstRow":{0:{firstName:"Sarah",collegeMajor:"English",},1:{firstName:"Bob",collegeMajor:"Computer Engineering",},2:{firstName:"Dylan",collegeMajor:"Mathematics",}},"SecondRow":{3:{firstName:"Molly",collegeMajor:"Music"}}}};
loadStudents();
function loadStudents(){
let page = document.getElementById('page');
page.innerHTML = "";
for(seatRow in class_A.seating){
for(index in class_A.seating[seatRow]){
//console.log(class_A.seating[seatRow][index]);
let studentName = class_A.seating[seatRow][index].firstName;
page.innerHTML += `<p> Name: ${studentName} <img src="addButImg.png" onclick = "addStudentToGroup('${studentName}')"></p>`;
//let addButton = document.getElementById("addButton");
//addButton.alt = studentName;
// console.log(addButton.alt);
}
}
}
function addStudentToGroup(sname){
console.log(sname);
}
<div id="page">
</div>