Проверка на checked внутри блока div
Добрый день. У меня есть некий тест, в котором варианты ответов каждого вопросов размещены внутри блока div. Некоторые вопросы подразумевают несколько правильных вариантов ответов, некоторые - один. В результате у меня часть вопросов реализована radio, часть - checkbox.
Подскажите, как правильно сделать проверку, чтобы в каждом из блоков был отмечен хотя бы один checkbox/radio? Вот кусок верстки: <div class="question_list"> <div id="qwestion_23" class="question_item"> <b>Какая длина установлена для перчаток диэлектрических?</b> <div id="5"> <div><input id="answer_23_12" value="12" name="qw_23[]" type="checkbox"> <label for="answer_23_12"><span></span>Вариант ответа 1</label></div> <div><input id="answer_23_13" value="13" name="qw_23[]" type="checkbox"> <label for="answer_23_13"><span></span>Вариант ответа 2</label></div> <div><input id="answer_23_14" value="14" name="qw_23[]" type="checkbox"> <label for="answer_23_14"><span></span>Вариант ответа 3</label></div> <div><input id="answer_23_15" value="15" name="qw_23[]" type="checkbox"> <label for="answer_23_15"><span></span>Вариант ответа 4</label></div> <div><input id="answer_23_16" value="16" name="qw_23[]" type="checkbox"> <label for="answer_23_16"><span></span>Вариант ответа 5</label></div> </div> </div> <div id="qwestion_24" class="question_item"> <b>Какие общие требования предъявляются к распределительным устройствам, щитам и сборкам, установленным</b> <div id="5"> <div><input id="answer_24_17" value="17" name="qw_24" type="radio"> <label for="answer_24_17"><span></span>Вариант ответа 1</label></div> <div><input id="answer_24_18" value="18" name="qw_24" type="radio"> <label for="answer_24_18"><span></span>Вариант ответа 2</label></div> <div><input id="answer_24_19" value="19" name="qw_24" type="radio"> <label for="answer_24_19"><span></span>Вариант ответа 3</label></div> <div><input id="answer_24_20" value="20" name="qw_24" type="radio"> <label for="answer_24_20"><span></span>Вариант ответа 4</label></div> <div><input id="answer_24_21" value="21" name="qw_24" type="radio"> <label for="answer_24_21"><span></span>Вариант ответа 5</label></div> </div> </div> <div id="qwestion_25" class="question_item"> <b>Какие обязанности по организации эксплуатации электроустановок возложены на ответственного за электр</b> <div id="5"> <div><input id="answer_25_22" value="22" name="qw_25" type="radio"> <label for="answer_25_22"><span></span>Вариант ответа 1</label></div> <div><input id="answer_25_23" value="23" name="qw_25" type="radio"> <label for="answer_25_23"><span></span>Вариант ответа 2</label></div> <div><input id="answer_25_24" value="24" name="qw_25" type="radio"> <label for="answer_25_24"><span></span>Вариант ответа 3</label></div> <div><input id="answer_25_25" value="25" name="qw_25" type="radio"> <label for="answer_25_25"><span></span>Вариант ответа 4</label></div> <div><input id="answer_25_26" value="26" name="qw_25" type="radio"> <label for="answer_25_26"><span></span>Вариант ответа 5</label></div> </div> </div> </div> А вот мои попытки сделать проверку - работает некорректно.
$('#testingForm').submit(function(){
var errors = 0;
$("div.question_item").each(function() {
if ($(this).children("div").children("div").children("input:radio:checked").length == 0) {
errors++;
}
});
if (errors!=0) {
alert("Вы ответили не на все вопросы!");
return false;
}
});
|
Batyabest,
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(function() {
$('#testingForm').submit(function(event){
var question = $("div.question_item");
question.length == question.has(":checked").length || (event.preventDefault(),alert("Вы ответили не на все вопросы!"))
});
});
</script>
</head>
<body>
<form action="http://" id="testingForm">
<div class="question_list">
<div id="qwestion_23" class="question_item">
<b>Какая длина установлена для перчаток диэлектрических?</b>
<div id="5">
<div><input id="answer_23_12" value="12" name="qw_23[]" type="checkbox"> <label for="answer_23_12"><span></span>Вариант ответа 1</label></div>
<div><input id="answer_23_13" value="13" name="qw_23[]" type="checkbox"> <label for="answer_23_13"><span></span>Вариант ответа 2</label></div>
<div><input id="answer_23_14" value="14" name="qw_23[]" type="checkbox"> <label for="answer_23_14"><span></span>Вариант ответа 3</label></div>
<div><input id="answer_23_15" value="15" name="qw_23[]" type="checkbox"> <label for="answer_23_15"><span></span>Вариант ответа 4</label></div>
<div><input id="answer_23_16" value="16" name="qw_23[]" type="checkbox"> <label for="answer_23_16"><span></span>Вариант ответа 5</label></div>
</div>
</div>
<div id="qwestion_24" class="question_item">
<b>Какие общие требования предъявляются к распределительным устройствам, щитам и сборкам, установленным</b>
<div id="5">
<div><input id="answer_24_17" value="17" name="qw_24" type="radio"> <label for="answer_24_17"><span></span>Вариант ответа 1</label></div>
<div><input id="answer_24_18" value="18" name="qw_24" type="radio"> <label for="answer_24_18"><span></span>Вариант ответа 2</label></div>
<div><input id="answer_24_19" value="19" name="qw_24" type="radio"> <label for="answer_24_19"><span></span>Вариант ответа 3</label></div>
<div><input id="answer_24_20" value="20" name="qw_24" type="radio"> <label for="answer_24_20"><span></span>Вариант ответа 4</label></div>
<div><input id="answer_24_21" value="21" name="qw_24" type="radio"> <label for="answer_24_21"><span></span>Вариант ответа 5</label></div>
</div>
</div>
<div id="qwestion_25" class="question_item">
<b>Какие обязанности по организации эксплуатации электроустановок возложены на ответственного за электр</b>
<div id="5">
<div><input id="answer_25_22" value="22" name="qw_25" type="radio"> <label for="answer_25_22"><span></span>Вариант ответа 1</label></div>
<div><input id="answer_25_23" value="23" name="qw_25" type="radio"> <label for="answer_25_23"><span></span>Вариант ответа 2</label></div>
<div><input id="answer_25_24" value="24" name="qw_25" type="radio"> <label for="answer_25_24"><span></span>Вариант ответа 3</label></div>
<div><input id="answer_25_25" value="25" name="qw_25" type="radio"> <label for="answer_25_25"><span></span>Вариант ответа 4</label></div>
<div><input id="answer_25_26" value="26" name="qw_25" type="radio"> <label for="answer_25_26"><span></span>Вариант ответа 5</label></div>
</div>
</div>
</div>
<input name="" type="submit" value="send">
</form>
</body>
</html>
|
рони, спасибо огромное))
Но у меня 2 момента возникли: 1. Скрипт после закрытия alert продолжает рабоатьт - у меня если на все вопрсоы отвечено, вылезает модалочка с резулататами, вот у меня получается сначала alert, а потом модалка сразу. Добавил return false так:
$('#testingForm').submit(function(event){
var question = $("div.question_item");
question.length == question.has(":checked").length || (event.preventDefault(),alert("Вы ответили не на все вопросы!"))
return false;
});
Но в таком варианте если везде есть отмеченные вещи, не отправляется форма... ну ведь там returm false |
Batyabest,
:-?
$(function() {
$('#testingForm').submit(function(event){
var question = $("div.question_item");
if(question.length != question.has(":checked").length) {
event.preventDefault()
alert("Вы ответили не на все вопросы!");
}
else {
alert("это модальное окно");
}
});
});
|
рони, скорее всего конфликтует ajax отправка формы с этой проверкой. Может мне дать вам доступ вы посмотрите? Целый день бьюсь с этим моментом((((
|
Batyabest,
не нужно, всё что мог смотрите выше |
рони, спасибо огромное! Ваш код очень пригодился. Просто у меня форма отправлялась через Ajax с помощью специального компонента. А в нем есть встроенная возможность запрещать или разрешать отправку формы. Так вот запретить я запретил, а else не написал для отправки)) Спасибо большое еще раз за помощь!
|
| Часовой пояс GMT +3, время: 03:07. |