Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   значение radio (https://javascript.ru/forum/jquery/45181-znachenie-radio.html)

Prowler 18.02.2014 01:14

значение radio
 
Доброго вам!
Не выходит, вроде бы, простая вещь.
Нужно проверить radio на check неcheck.
Групп radio на странице несколько, ни количество групп ни количество самих input не известно(генерируется).

Задача проверить перед отправкой формы на нечекнутые radio и поругать за это пользователя :)

Пытаюсь родить что-нибудь вроде такого:
$("div .answers").each(function(){
if($(this).children().prop("checked")) {alert('checkd');}
});

т.е. берется первый блок ответов-radio(заключенный в div), получаем его потомков, проверяем: если они чекнуты то выводим сообщение. Потом след. блок и т.д. Но это не работает как не старался.

Чуть не забыл html:
<div class="answers">
<INPUT type="radio" id="20-21" name="20" />
<INPUT type="radio" id="21-21" name="21" />
</div>

ну и так далее...
Поможите люди добрые :thanks:

рони 18.02.2014 02:44

Цитата:

Сообщение от Prowler
$("div .answers").each

дивы то все проверяем а инпуты значит хором хотим $(this).children().prop("checked") -- циклом их циклом :write: -- каждый checked

Prowler 19.02.2014 15:47

действительно. Хотя, пробовал перебирать, но видимо в поздний час где-то допустил синтаксическую ошибку и не работало. Хотя, так и не понятно, в примерах children().css() - стили применяются ко всем дочерним элементам, без перебора, а свойство не получается....
Спасибо за наводку, получилось то, что хотел.:victory: :thanks:

danik.js 19.02.2014 16:08

Цитата:

Сообщение от Prowler
применяются

Одно дело применить свойство, другое дело - получить. Чувствуешь разницу?

danik.js 19.02.2014 16:10

Цитата:

Сообщение от рони
циклом их циклом

Можно просто отфильтровать :not(:checked). Если такие есть - значит чекнуты не все.

Prowler 19.02.2014 16:17

Цитата:

Сообщение от danik.js (Сообщение 298384)
Одно дело применить свойство, другое дело - получить. Чувствуешь разницу?

Честно? Нет.

А отфильтровать нельзя. Задача была найти на какой вопрос не получен ответ и вывести этот номер.

рони 19.02.2014 16:37

Цитата:

Сообщение от Prowler
А отфильтровать нельзя.

почему нельзя-то?
сам себе отвечаю может вопросы с
type="radio"

danik.js 19.02.2014 17:03

Цитата:

Сообщение от Prowler
Честно? Нет.

Когда нужно записать свойство - проблем нет: прошелся по всем элементам и каждому записал свойство. А когда нужно получить свойство, че делать? Обойти все и вернуть true только когда у все true? Или если хотя бы у одного true? А как насчет других свойств, не логических? Скажем как вернуть style.color? Вот когда расскажешь как оно должно работать (причем так, чтобы это все понимали без объяснений, ибо методы в jquery просто обязаны быть интуитивно-понятными), вот тогда можешь завести bug в багтреккере Jquery.

Prowler 19.02.2014 20:48

Цитата:

Сообщение от рони
почему нельзя-то?

заранее не известно сколько может быть ответов к тому или иному вопросу. Если отфильтровать все не_чекнутые, мы, конечно получим их список, но это не то.
-radio1
-radio2
-radio3
отметили радио2, фильтр вернет радио 1 и радио3. Но о том что радио2 = чек я не знаю, ибо я не знаю что их три.

Можно ли как то использовать "подфильтр"?
$("div .answers").each(function(
// можно ли здесь применить селектор чтобы он подействовал к текущей выборке, т.е. к объекту на который ссылаемся $(this)?
))

рони 19.02.2014 21:09

Prowler,
у всех радио должно быть одно имя если с этим именем все не чекет значит ничего невыбрано

Prowler 19.02.2014 22:00

хм... не дотумкую какой селектор может быть.

divам я могу дать значения, совпадающие с именами radio:
<div id=6>
<input type="radio" name='6' />
<input type="radio" name='6' />
<input type="radio" name='6' />
</div>
<div id=7>
<input type="radio" name='7' />
<input type="radio" name='7' />
<input type="radio" name='7' />
<input type="radio" name='7' />
<input type="radio" name='7' />
</div>
соответственно можно получить a=$("div").attr('id')
можно как то выбрать по div[id=a] AND input:radio:checked?

рони 19.02.2014 22:42

Prowler,
<!DOCTYPE HTML>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <script src="http://code.jquery.com/jquery-latest.js"></script>

  <script>
       $(function () {
           $('#test').click(function () {
               $("div.answers").each(function () {
                   if (!$('input:checked', this).length) {
                       alert('Вопрос ' + this.id + ' неотвечен');
                   }
               });
           })
       })
  </script>
</head>
<body>
<div id=6 class="answers">
 <input type="radio" name='6' />
 <input type="radio" name='6' />
 <input type="radio" name='6' />
 </div>
 <div id=7 class="answers">
 <input type="radio" name='7' />
 <input type="radio" name='7' />
 <input type="radio" name='7' />
 <input type="radio" name='7' />
 <input type="radio" name='7' />
 </div>
 <input name="" type="button" value="проверка" id="test">
</body>
</html>

Prowler 20.02.2014 00:14

рони,
Спасибо большое. Но можно, если не сложно, объяснить этот селектор ('input:checked', this) или ссылочку дать, где можно почерпнуть знания об этом.

рони 20.02.2014 00:24

Prowler,
'input:checked' обычный селектор jquery а через запятую где искать контекст -- в данном случае this очередной div -
http://api.jquery.com/jQuery/#jQuery-selector-context

Prowler 20.02.2014 00:35

рони,
эх, как мало я знаю... Спасибо огромнейшее за уделенное мне время, за разъяснения. Это прям именно то, что нужно, ну и то, что хотел узнать в 9 посте.


Часовой пояс GMT +3, время: 03:35.