Я провожу онлайн-экзамен, в котором вопросы поступают из базы данных через php и отображаются через ajax. Я хочу получить выбранный переключатель и сохранить его в массиве, которого не происходит, потому что я не получаю значение. Все остальное работает нормально, только я не могу нажать значение радио в массиве. я могу предоставить код php, если вам нужно просмотреть проблему пожалуйста помоги
HTML:
<button type = "button" class = "btn btn-info btn-md" id = "mark" onclick = "loadNextQues(1)">Mark for Review & Next</button>
<button type = "button" class = "btn btn-info btn-md">Clear Response</button>
<button type = "submit" class = "btn btn-info btn-md" id = "save" style = "position:absolute;right:20px;bottom:35px" onclick = "loadNextQues(0)">Save and Next</button>
<form action = "check.php">
<button type='submit' class = "btn btn-info btn-md" id = "water" style = "visibility:hidden;position:absolute;right:20px;bottom:35px">submit</button>
Javascript:
function loadNextQues(flag) {
quesno++;
if (flag == 1) {
//add css to the button for review
} else {
//add css for the button as answered
}
url = "http://localhost/assignments/load-questions.php?qno = " + quesno;
$.get(url, function(data, status) {
response = JSON.parse(data);
console.info(response);
var quest = "<p>" + response.qno + " " + response.question + "</p>";
quest += "<form>";
quest +=
'<input type = "radio" name = "op" value=\'' +
response.opA +
"'>A." +
response.opA +
"<br>";
quest +=
'<input type = "radio" name = "op" value=\'' +
response.opB +
"'>B." +
response.opB +
"<br>";
quest +=
'<input type = "radio" name = "op" value=\'' +
response.opC +
"'>C." +
response.opC +
"<br>";
quest +=
'<input type = "radio" name = "op" value=\'' +
response.opD +
"'>D." +
response.opD +
"<br>";
quest += "</form>";
document.getElementById("questBox").innerHTML = quest;
});
if (quesno == 15) {
document.getElementById("mark").style.visibility = "hidden";
document.getElementById("save").style.visibility = "hidden";
document.getElementById("water").style.visibility = "visible";
}
var myArr = [];
var Selected = document.querySelectorAll('[name = "op"]:checked');
if (Selected != null) {
arr.push(Selected.value);
}
console.info(arr);
}



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


Вы можете использовать синтаксис ES6 и метод массива .map(). Что-то типа...
var arr = Selected.map(dom => dom.value);
DOM означает объектную модель документа, в этом контексте он имеет в виду элементы радиоввода, к которым вы пытаетесь получить доступ. Используемый синтаксис является сокращением для чего-то вроде этого: var arr = Selected.map(function(radio) { return radio.value; }) map выполняет работу по зацикливанию и помещению всех ваших значений в одну переменную.
Большое спасибо.
Вам нужно перебирать элементы, чтобы получить их значения, также arr не определен.
Отредактируйте, чтобы получить желаемый эффект...
var arr = new Array();
function loadNextQues(flag) {
var Selected = document.querySelectorAll('[name = "op"]:checked');
if (Selected != null) {
Selected.forEach(function(radio) {
arr.push(radio.value);
});
}
console.info(arr);
quesno++;
if (flag == 1) {
//add css to the button for review
} else {
//add css for the button as answered
}
url = "http://localhost/assignments/load-questions.php?qno = " + quesno;
$.get(url, function(data, status) {
response = JSON.parse(data);
console.info(response);
var quest = "<p>" + response.qno + " " + response.question + "</p>";
quest += "<form>";
quest +=
'<input type = "radio" name = "op" value=\'' +
response.opA +
"'>A." +
response.opA +
"<br>";
quest +=
'<input type = "radio" name = "op" value=\'' +
response.opB +
"'>B." +
response.opB +
"<br>";
quest +=
'<input type = "radio" name = "op" value=\'' +
response.opC +
"'>C." +
response.opC +
"<br>";
quest +=
'<input type = "radio" name = "op" value=\'' +
response.opD +
"'>D." +
response.opD +
"<br>";
quest += "</form>";
document.getElementById("questBox").innerHTML = quest;
});
if (quesno == 15) {
document.getElementById("mark").style.visibility = "hidden";
document.getElementById("save").style.visibility = "hidden";
document.getElementById("water").style.visibility = "visible";
}
var myArr = [];
Вы правы, Спасибо. Но когда я нажимаю «Сохранить и далее», в консоли отображается только последний выбранный параметр радио в массиве, а не выбранные параметры радио в предыдущих вопросах до этого. Пожалуйста, помогите, сэр/мэм.
В этом случае вам нужно переместить var arr = new Array() перед loadNextQues объявлением функции и переместить код, который я вам дал, в начало функции. Я обновлю свой ответ, чтобы показать его
Большое спасибо, вы очень помогли. Я сделал то, что вы сказали мне, и это работает отлично. Это работает :)
Не могли бы вы помочь мне еще в одном вопросе, в последнем вопросе нет кнопки «Сохранить» и «Далее», появляется кнопка «Отправить», все, что мне нужно сделать, это нажать кнопку «Отправить», массив с предыдущими параметрами радио должен включать параметр радио последнего вопроса и перейти к другому файлу с именем check.php. Можете ли вы сказать мне, как это сделать? Большое спасибо за предыдущий ответ.
Не могли бы вы уточнить, куда мне поместить этого сэра и что такое дом, на самом деле я новичок в Javascript .. спасибо