Jquery 如何获取所有未选中的单选按钮

Jquery 如何获取所有未选中的单选按钮,jquery,html,css,Jquery,Html,Css,好的,我有一个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/&

好的,我有一个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;
var items=xml.children('item');
如果(items.length>0)
{
变量ul=$(“
    ”{ 类别:“价格表” }); 项。每个(函数(){ var$this=$(this); 变量li=$(“
  • ”); 变量img=$(''{ 键入:“收音机”, id:$this.children('id').text(), 名称:“产品” }); 变量范围=$(''{ text:$this.children('price').text()+'USD' }); 变量标签=$(''{ for:$this.children('id').text() }); 标签.附加(img); 标签。追加(“
    ”); 标签。追加(span); li.追加(输入); li.附加(标签); ul.hide().append(li.fadeIn('slow'); }); 返回ul; } 返回null;
现在,我需要一个很好的方法来找到所有未检查的无线电标签,并对其进行处理,例如淡出它们或更改css属性。由于XML列表由近40项组成,编写if-else结构是不可能的。我们需要一个好的解决方案。提前谢谢


编辑:见下面我的答案。

我认为这应该行得通

$("input:!checked");
您可能还需要在其中放置一个类选择器

然后执行
。每个
对元素执行操作

$('form input[type="radio"]').not(':checked').each(function() {
    $(this).addClass('unchecked');
    // or
    $(this).slideUp('slow');
});
显然,您使用的元素由您自己决定,但是:unchecked选择器是您所追求的。

试试这个(另请参见我的):


我自己找到的。上述答案对我来说都不管用,这很奇怪,因为其中大多数答案都应该是完全合法的

事实上,我所发现的工作是

$('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...

只是好奇。是否可以将未选中的botton的样式设置为默认样式,并仅重新设置选中botton的样式?如果你能的话,看起来会更容易更有效。我当然能。但这不会让我得到我需要的结果。在检查其中一个元素之前,观众需要看到所有元素都没有变化。明白了。我得好好考虑一下。在任何情况下,可能会有人很快找到一个好的解决方案。您确定这是有效的JQuery吗?我把它弄得有点乱,弄不好它能用。但是已经很晚了,我很累:)这对我不起作用。我相信你应该使用“输入:不(:检查)”就像在接受的答案中一样
//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...