#javascript #html
#javascript #HTML
Вопрос:
У меня есть этот код
const … = документ.querySelector (‘input[name=»…»]:checked’).значение;
И это работает только тогда, когда отмечены все варианты переключателей. Как сохранить ответы, даже если некоторые из них не отмечены?
Я пытался избавиться от «:checked», но это просто сохраняет первый вариант для всех, независимо от того, даже если я выбрал другой один раз. Затем я попытался выполнить следующее:
const … =документ.querySelectorAll(‘input[name =»… «]:not(:checked)’)
Но это тоже не сработало. Не мог бы кто-нибудь, пожалуйста, дать мне несколько советов о том, как заставить это работать?
html-пример 1 вопроса
<div id="question1" style="position:fixed; left:20px; top: 50px;"> 10 <label> <input type="radio" name="q0" value="a1" id="a1" class="radio"> IMAGE 1 <br><br><br> </label> <label> <input type="radio" name="q0" value="a2" id="a2" class="radio"> IMAGE 2 <br><br><br> </label> <label> <input type="radio" name="q0" value="a3" id="a3" class="radio"> IMAGE 3 <br><br><br> </label> <label> <input type="radio" name="q0" value="a4" id="a4" class="radio"> IMAGE 4 <br><br><br> </label> <label> <input type="radio" name="q0" value="a5" id="a5" class="radio"> IMAGE 5 <br><br><br> </label> </div>
JS
firebase.initializeApp(config);
var messagesRef = firebase.database().ref('messages');
document.getElementById('contactForm').addEventListener('submit', submitForm);
function submitForm(e){ e.preventDefault();
var a1 = getInputVal ('a1'); var a2 = getInputVal ('a2'); var a3
= getInputVal ('a3'); var a4 = getInputVal ('a4'); var a5 = getInputVal ('a5');
saveMessage( a1, a2, a3,a4,a5);
document.querySelector('.alert').style.display = 'block';
setTimeout(function(){
document.querySelector('.alert').style.display = 'none'; },8000);
document.getElementById('contactForm').reset(); }
function getInputVal(id){ return document.getElementById(id).value; }
function saveMessage( a1, a2, a3,a4,a5){ var newMessageRef = messagesRef.push(); newMessageRef.set({
a1:a1,
a2:a2,
a3:a3,
a4:a4,
a5:a5,
}); }
function saveMessage(){ const q1 = document.querySelector('input[name="q1"]:checked').value;
Комментарии:
1. Что именно вы хотите сделать? Вы пытаетесь получить все значения из всех флажков с определенным
name
значением в массив?2. Пожалуйста, добавьте какой-нибудь актуальный код. так что я могу понять. Добавьте фрагмент html.
3. В принципе, у меня есть тест с 10 вопросами. у каждого вопроса есть свое собственное «имя» и 5 вариантов на выбор. Проблема в том, что если не ответить хотя бы на 1 вопрос (то есть не выбрать переключатель для 1 вопроса), кнопка отправки блокируется и не позволяет мне отправить ответ. Кроме того, вопросы меняются каждые 30 секунд, и невозможно ответить на предыдущие вопросы, если на них нет ответов.
4. @Mayur добавил js и html
Ответ №1:
Возможно, вам захочется установить все флажки, выполняющие querySelector, затем проверить, какой из них установлен, а какой нет. Я добавил к нему две функции, вы можете просто запустить одну из циклов for и выполнить ту же логику.
function getUncheckedValues() {
const obj = {};
Array.from(document.querySelectorAll('input[type="radio"]'))
.forEach((checkbox) => {
obj[checkbox.value] = checkbox.checked
});
console.log(obj);
return obj;
}
const resultEl = document.getElementById('checkedresult');
const resultUncheckEl = document.getElementById('uncheckedresult');
document.getElementById('showResult').addEventListener('click', () => {
const values = getUncheckedValues();
console.log(values);
const newRef = firebase.database().ref('messages').push();
newRef.set(values);
});
<label> <input type="radio" name="q0" value="a1" id="a1" class="radio"> IMAGE 1 <br><br><br> </label>
<label> <input type="radio" name="q0" value="a2" id="a2" class="radio"> IMAGE 2 <br><br><br> </label>
<label> <input type="radio" name="q0" value="a3" id="a3" class="radio"> IMAGE 3 <br><br><br> </label>
<label> <input type="radio" name="q0" value="a4" id="a4" class="radio"> IMAGE 4 <br><br><br> </label>
<label> <input type="radio" name="q0" value="a5" id="a5" class="radio"> IMAGE 5 <br><br><br> </label>
<br><br>
<button id="showResult">Show checked values</button>
<br><br>
<div id="checkedresult"></div>
<div id="uncheckedresult"></div>
Комментарии:
1. @ Subhendu Кунду, большое тебе спасибо! Я использовал то, что вы мне сказали, но это снова сохраняет только первый ответ, даже если я выбрал другой.. Что я делаю не так?
2. @ Subhendu Kundu , к сожалению, это не работает ( . Это дает мне просто список вариантов вопроса вместо ответа … (
3. Это было просто предупреждение, если вы понимаете логику, вы увидите, что истинный boo дает вам ответ. Теперь вам нужно изменить формат данных так, как вы хотите.
4.
a1:a1, a2:a2, a3:a3, a4:a4, a5:a5,
в этом случае как вы определяете, какой из них отмечен?5. @ Subhendu Kundu Я помню, какой из них что обозначает, и когда в базе данных firebase я вижу a3, я вспоминаю, что это 3-й вариант. Эти параметры выбираются пользователем
Ответ №2:
Вот основной фрагмент. Это поможет вам расчистить себе путь. Просто скопируйте приведенный ниже код.
<div id="question1" style="position:fixed; left:20px; top: 50px;">
<label> <input type="radio" name="q0" value="a1" id="a1" class="radio" onchange="checkAns()"> IMAGE 1 <br><br><br> </label>
<label> <input type="radio" name="q0" value="a2" id="a2" class="radio" onchange="checkAns()"> IMAGE 2 <br><br><br> </label>
<label> <input type="radio" name="q0" value="a3" id="a3" class="radio" onchange="checkAns()"> IMAGE 3 <br><br><br> </label>
<label> <input type="radio" name="q0" value="a4" id="a4" class="radio" onchange="checkAns()"> IMAGE 4 <br><br><br> </label>
<label> <input type="radio" name="q0" value="a5" id="a5" class="radio" onchange="checkAns()"> IMAGE 5 <br><br><br> </label>
<button id="btn" disabled>Button</button>
</div>
<script>
var a1 = document.getElementById('a1');
var a2 = document.getElementById('a2');
var a3 = document.getElementById('a3');
var a4 = document.getElementById('a4');
var a5 = document.getElementById('a5');
function checkAns(){
console.log(a1.checked, a2, a3, a4, a5);
if (a1.checked || a2.checked || a3.checked || a4.checked || a5.checked) {
document.getElementById("btn").disabled = false;
}
}
</script>
Это может помочь.