У меня проблема с работой кнопок в таблице оценок учащихся, у меня есть кнопка для вычисления среднего значения оценок с помощью функции getAverage(), у меня есть кнопка для вставки строк в таблицу с помощью функции с именем insert_Rows, и, наконец, один для добавления столбцов с помощью функции с именем insert_Column().
Моя проблема в том, что ни одна из них не работает, и я не понимаю, почему работала функция getAverage, пока не добавил две другие кнопки.
Это для задания, где мне не разрешено использовать jQuery.
Кроме того, это краткое описание двух кнопок:
Кнопка в стиле CSS, которая вставляет новую строку таблицы, подходящую для записи новых данных учащихся. Вы можете вставить после последней строки таблицы. Студенты должны предоставить кнопку, которая сохраняет таблицу в ее текущем состоянии, т.е. если есть 5 строк и 6 ячеек, файл cookie должен отражать это.
Кнопка в стиле CSS, которая вставляет новый столбец таблицы, подходящий для записи новых данных об оценке задания. Этот столбец требует заголовка. Вы можете решить, как вы хотите выполнить распределение заголовков (автоматическое, редактирование контента и т. д.). Должна быть еще одна кнопка, которая затем извлекает эти данные и заполняет их обратно в таблицу в том состоянии, в котором она находилась ранее. Если были добавлены дополнительные строки или столбцы, таблица должна вернуться к своему предыдущему состоянию на момент сохранения файла cookie (5 строк и 6 ячеек).
Кроме того, для дополнительного балла я должен использовать JavaScript и любой метод по моему выбору, чтобы удалить строку данных, выбранную пользователем, и еще один, чтобы удалить столбец назначения, выбранный пользователем, функция должна гарантировать, что итог столбца окончательной оценки обновляются после этого удаления.
// get the average
function getAverage()
{
let table = document.getElementById("gradesTable");
//Loop over the rows array directly
let rows = Array.prtotype.slice.call(table.rows); //let is block scoped - can only be used in this block
rows.froEach(function(row)
{
let cells = array.protoype.slice.call(row.querySelectorAll(".Assignment")); // Get all the Assignment cells into an array
// declairing sum and gradeAverage with let and by defining them in the row loop keeps the values unique for each row
let sum = 0;
let gradeAverage = 0;
// Now just loop the cells Array
cells.forEach(function(cell,index){
//.textContent instead for strings that dont contain any values
var currentValue = parseInt(cell.textContent);
if (currentValue >= 0 && currentValue <=100){
sum += currentValue;
}
// If the cell has "-" for content
if (cell.textContent === '"-"'){
// Apply a pre-made CSS class
cell.classList.add("noGrade");
} else {
// Remove a pre-made CSS class
cell.classList.remove("noGrade");
}
// If this is the last cell in the row
if (index === cells.length-1){
gradeAverage = sum/5;
cell.nextElementSibling.textContent = Math.round(gradeAverage) + "%";
// There is a grade, so check it for low
if (gradeAverage >= 0 && gradeAverage < 40) {
cell.nextElementSibling.classList.add("lowGrade");
} else {
cell.nextElementSibling.classList.remove("lowGrade");
}
}
});
});
}
// add a row to the table
function insert_Row() {
let table = document.getElementById("gradesTable"); //assign table id to a variable
let tableRows = table.rows.length; // gives how many rows in the table
let row = table.insertRow(tableRows); //insert after the last row in the table
let cellsInTable = document.getElementById("gradesTable").rows[0].cells
let columnTotal = cellsInTable.length; //assign the columnTotal the number of columns that the first row has
//loop through each column
for(let i = 0; i < columnTotal; i++)
{
//add a new cell for each column
let cell = row.insertCell(i);
//assign each new cell the default value "-"
cell.innerHTML = "-";
}
}
// add a column to the HTML table
function appendColumn()
{
let table = document.getElementById("gradesTable"); // table reference
// open loop for each row and append cell
for(let x = 0; x < table.rows.length; x++)
{
createCell(tbale.rows[x].insertCell(table.rows[x].cells.lenght), x, "col");
}
}
function insert_Column()
{
}
function deleteColumn()
{
let allRows = document.getElementById("gradesTable").rows;
for (var i=0; i < allRows.length; i++)
{
if (allRows[i].cells.length > 1)
{
allRows[i].deleteCell(-1);
}
}
}
Исправление, функция «Вставить строку», кажется, работает правильно, но функция средних оценок — нет, и я не знаю, с чего начать писать другие функции.
Если кто-нибудь может предложить совет или лучшие места для обучения? Поскольку мой лектор только что проинформировал нас об использовании W3Schools, и он не учит нас языку, я просто чувствую себя не в своей тарелке.
Спасибо, я исправил это, но, как ни странно, это не мешало моей функции insert_Row работать
Я настоятельно рекомендую изучить отладчик JavaScript в выбранном вами браузере. Тогда вы сможете точно увидеть, что происходит в каждой строке вашего кода.
+1, у вас много прямых опечаток в приведенном выше коде, которые были бы сразу очевидны в ошибках, которые вам показывает chrome devtools.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


let cells = array.protoype.slice.call(...ХочешьArrayнеarray; JavaScript чувствителен к регистру. Или просто используйтеArray.from(...). Вы должны получить сообщение об ошибке в своей консоли, хотя ...