2011-09-29 5 views
13

Ok, так что у меня есть код 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. Нужно хорошее решение. Заранее спасибо!

EDIT: См. Мой ответ ниже.

+0

Просто любопытно. Можете ли вы сделать стиль для непроверенных ограничений по умолчанию и только переделать проверенный? Кажется, было бы намного проще и эффективнее, если можно. – nycdan

+0

конечно могу. Но это не принесло бы мне результата, который мне нужен. зритель должен видеть все элементы неизменными, прежде чем он проверит один из них. – khvn

+0

Gotcha. Мне нужно обдумать это. В любом случае кто-то, вероятно, произойдет с хорошим решением. – nycdan

ответ

17

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

То, что я обнаружил, что работает на самом деле

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

я думаю, что это sould работать

$("input:!checked"); 

Вы можете поставить селектор класса в там.

Затем выполните команду .each, чтобы сделать что-то с элементами

+0

Вы уверены, что это действительно JQuery? Я немного общаюсь с ним и не могу заставить его работать. Но уже поздно, и я устал :) –

+0

это не работает для меня. Я считаю, что вы должны использовать «input: not (: checked)», как в принятом ответе – ThdK

0
$('form input[type="radio"]').not(':checked').each(function() { 
    $(this).addClass('unchecked'); 
    // or 
    $(this).slideUp('slow'); 
}); 

Очевидно, что элемент, который вы используете до вас, но: бесконтрольно селектор, что вы после этого.

Смежные вопросы