используя jquery для поиска групп радиокнопок без ответов - PullRequest
1 голос
/ 25 января 2011

Я ломал голову, чтобы найти лучшее решение для следующей ситуации.

Представьте себе страницу с МНОЖЕСТВОМ радиокнопок, а затем с некоторой пользовательской проверкой, выделяющей группы радиокнопок, на которые не было ответа.

пример HTML (с некоторыми предварительно выбранными ответами):

<input type='radio' name='a' value='1' />
<input type='radio' name='a' value='2' />
<input type='radio' name='a' value='3' />
<input type='radio' name='b' value='1' checked="checked"//>
<input type='radio' name='b' value='2' />
<input type='radio' name='b' value='3' />
<input type='radio' name='c' value='1' />
<input type='radio' name='c' value='2' checked="checked"/>
<input type='radio' name='c' value='3' />
<input type='radio' name='d' value='1' />
<input type='radio' name='d' value='2' />
<input type='radio' name='d' value='3' />

Я уже написал немного jQuery, который делает то, что я хочу, но я просто знаю, что это можно сделать лучше / быстрее / красивее / эффективнее.

//select all radiobuttons
var $radios = $("input[type='radio']")
//loop through all the radios that are checked
$($radios+":checked").each(function(){
    //filter out all radios with the current name, and add something to recognize them with
    $($radios).filter("[name='" + $(this).attr("name") + "']").addClass("checked")
});

//find all radios without the class checked, and highlight them
var $unchecked_radios = $($radios + ":not(.checked)").addClass("highlight");

Но я застрял в том, как объединить эти два, так что вычитая те, которые имеют ответ от всей совокупности радиостанций.

(хотя я подозреваю, что может быть лучший способ выбрать группы радиокнопок с одинаковым именем)

Любая помощь будет принята с благодарностью!

С уважением, Casper

Ответы [ 3 ]

2 голосов
/ 25 января 2011

Не знаю, может ли это помочь, вот код:

$(document).ready(function() {
        $('input:not(:checked)').each(function() {
            if($('input[name='+$(this).attr('name')+']:checked').size() == 0)
            {
                $(this).addClass('highlight');
            }
        });
    });

При этом вы выделяете только непроверенное радио групп, которые еще не проверяли радио.Это соответствует вашим потребностям?

0 голосов
/ 25 января 2011

Попробуйте:

var $radios = $("input[type='radio']")
//loop through all the radios that are checked
$radios.filter(":checked")
.each(function(){
    //filter out all radios with the current name, and add something to recognize them with
    $($radios).filter("[name='" + $(this).attr("name") + "']").addClass("checked")
})
.end()
.filter(":not(.checked)").addClass("highlight");

В зависимости от варианта использования, это может быть лучше:

$("input[type='radio']").filter(":not(:checked)").addClass("highlight");

Но я не знаю, нужен ли вам класс "checked" для чего-то другоготоже.

0 голосов
/ 25 января 2011

Как насчет этого?

function is_answered(valueName)
{
  var result=$('input[name='+valueName+']:checked').size();
  return result > 0;
}
...