Как получить все непроверенные переключатели
Итак, у меня есть код jQuery, который строит мои радиовходы из XML-данных, например:
var items = xml.children('item');
if (items.length > 0)
{
var ul = $('<ul/>',{
class: 'priceList'
});
items.each(function(){
var $this = $(this);
var li = $('<li/>');
var img = $('<img/>',{
src: 'products/' + $this.children('image').text(),
});
var input = $('<input/>',{
type: 'radio',
id: $this.children('id').text(),
name: 'products'
});
var span = $('<span/>',{
text: $this.children('price').text() + ' USD'
});
var label = $('<label/>',{
for: $this.children('id').text()
});
label.append(img);
label.append("</br>");
label.append(span);
li.append(input);
li.append(label);
ul.hide().append(li).fadeIn('slow');
});
return ul;
}
return null;
Теперь мне нужен хороший способ найти все непроверенные метки радио и сделать что-то с ними, например. выцветать или изменить свойство css. Поскольку список XML состоит из почти 40 элементов, запись конструкции if-else является не-go. Нужно хорошее решение. Спасибо заранее!
РЕДАКТИРОВАТЬ: См. мой ответ ниже.
Ответы
Ответ 1
Нашел сам. Ни один из вышеперечисленных ответов не работал у меня, что странно, потому что большинство из них должно быть полностью законным.
То, что я нашел, работает на самом деле
$('input[type="radio"]:not(:checked)')
И в моем случае мне понадобился
$('li input[type="radio"]:not(:checked) + label')
И весь код:
//we'll need m for detecting a click outside of element with our radio buttons...
var m = false;
$(document).ready(function(){
$.ajax({
type: "GET", url: 'xml.xml', dataType: 'xml',
success: function(data){
var xml = $(data);
$('#windowList').append( ItemToUl(xml.children()) );
}
});
$('.calc').hover(function(){
m=true;
}, function(){
m=false;
});
$("body").mousedown(function(){
if(! m) {
//...and unchecking a checked radio. I heard that .attr() was deprecated but couldn't get .prop() to work
$('li input[type="radio"]:checked').attr('checked', false);
$('li input[type="radio"]:not(:checked) + label').fadeTo('slow', 1);
}
});
$("li input").live("change", function(){
$('li input[type="radio"]:checked + label').fadeTo('slow', 1);
$('li input[type="radio"]:not(:checked) + label').fadeTo('slow', 0.45);
});
});
//constructing function, etc...
Ответ 2
Попробуйте это (также см. мой jsfiddle):
$('input').not(':checked')
Ответ 3
Я думаю, что это будет работать
$("input:!checked");
Возможно, вы захотите также установить селектор классов.
Затем выполните .each
, чтобы что-то сделать с элементами
Ответ 4
$('form input[type="radio"]').not(':checked').each(function() {
$(this).addClass('unchecked');
// or
$(this).slideUp('slow');
});
Очевидно, что элемент, который вы используете, зависит от вас, но: unchecked selector - это то, что вам нужно.