На моей странице есть таблица, в которой есть серия выпадающих меню в одном столбце (все из которых содержат серию чисел), я хочу запускать функцию каждый раз, когда один изменяется значение, которое принимает сумму значений и отображает результат на странице. Я полагаю, что моя функция (totalMarks) получает коллекцию всех моих выпадающих меню, затем перебирает их, добавляя к сумме значение выбранного индекса, а затем отображает общие метки в некоторых тегах h2. Является ли моя проблема в суммировании выпадающих меню или где-то еще?Сумма выбранных элементов выпадающих меню страниц
function markForm(tagID) {
var x = document.getElementById(tagID)
var pre = document.createElement("pre");
x.appendChild(pre);
var SectionDetails = [
{ name: "Dynamic Table", maxMarks: 20},
{ name: "IntelliJ usage", maxMarks: 10},
{ name: "Calendar Controller", maxMarks: 30},
{ name: "Active Form", maxMarks: 20},
{ name: "Object Database", maxMarks: 20}
];
var table = pre.appendChild(document.createElement("table"));
var tableHeader = table.appendChild(document.createElement("thead"));
var tableRow = tableHeader.appendChild(document.createElement("tr"));
var headRow = tableRow.appendChild(document.createElement("th"));
headRow.appendChild(document.createTextNode("Section"));
headRow = tableRow.appendChild(document.createElement("th"));
headRow.appendChild(document.createTextNode("Max Mark"));
headRow = tableRow.appendChild(document.createElement("th"));
headRow.appendChild(document.createTextNode("Comments"));
headRow = tableRow.appendChild(document.createElement("th"));
headRow.appendChild(document.createTextNode("Mark"));
var resultsRows = table.appendChild(document.createElement("tbody"));
for (var i = 0; i < SectionDetails.length; i++) {
tableRow = resultsRows.appendChild(document.createElement("tr"));
var tableData = tableRow.appendChild(document.createElement("td"));
tableData.appendChild(document.createTextNode(SectionDetails[i].name));
tableData = tableRow.appendChild(document.createElement("td"));
tableData.appendChild(document.createTextNode(SectionDetails[i].maxMarks));
tableData = tableRow.appendChild(document.createElement("td"));
var tarea = document.createElement("textarea");
tarea.value = "Enter Comments";
tableData.appendChild(tarea);
tableData = tableRow.appendChild(document.createElement("td"));
var dropDown = document.createElement("select");
dropDown.name = SectionDetails[i].name;
dropDown.setAttribute("onchange", totalMarks());
for (var j = 0; j < (SectionDetails[i].maxMarks + 1); j++) {
var listItem = new Option(j);
listItem.value=j;
dropDown.appendChild(listItem);
}
tableData.appendChild(dropDown);
}
var h2 = document.createElement("h2");
h2.id = "headline";
h2.innerHTML = "Total Marks: 0";
x.appendChild(h2);
}
function totalMarks() {
var total = 0;
var ddmenus = document.getElementsByTagName("select");
for (var a = 0; a < ddmenus.length; a++) {
total = total + ddmenus[a].options[ddmenus[a].selectedIndex].value;
}
document.getElementsByTagName("h2").innerHTML = "Total Marks: " + total;
}
Как страница должна выглядеть, и делает, если я не включать строку "document.getElementById (" marksline ") innerHTML = " Всего Marks:" + общий;"
Как выглядит страница, если я оставлю вышеуказанную строку в коде.
Спасибо, имеет смысл, но по какой-то причине, когда я добавляю эту итоговую строку для отображения итогового значения, моя петля, создающая мою таблицу, перестает работать, когда она достигает создания первого выпадающего меню, я добавлю несколько скриншотов в op. Есть идеи? – Chaz
В конце вы должны иметь только один h2 с id = "headline", иначе он сломается. Есть ли шанс, что вы попытаетесь создать более одного h2 с этим идентификатором? Возможно, немного больше вашего кода поможет понять, что вы делаете. Или посмотрите на консоль на наличие ошибок. – Tallerlei
У меня только один h2 в документе, поэтому я не думаю, что это так, может быть, я создаю выпадающие меню и вызывая функцию onchange, поэтому он бежит сразу, прежде чем элемент h2 будет создан? Теперь я добавил полный код в op. Хорошо, консоль говорит, что я упомянул ошибку, самый простой способ обойти это? – Chaz