2011-09-29 41 views
13

ठीक प्राप्त करने के लिए, तो मैं एक 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; 

अब मैं एक अच्छा तरीका की जरूरत है सभी अनियंत्रित रेडियो को खोजने के लिए लेबल और उनके साथ कुछ करो, उदाहरण के लिए उन्हें बाहर निकाल दें या एक सीएसएस संपत्ति बदलें। चूंकि एक्सएमएल सूची में लगभग 40 आइटम होते हैं, यदि एक और लेखन लिखना कोई नहीं है। एक अच्छा समाधान की आवश्यकता है। अग्रिम में धन्यवाद!

संपादित करें: नीचे मेरा उत्तर देखें।

+0

बस उत्सुक। क्या आप अनचेक बोतलों के लिए शैली को डिफ़ॉल्ट बना सकते हैं और केवल चेक किए गए एक को पुन: स्थापित कर सकते हैं? ऐसा लगता है कि यदि आप कर सकते हैं तो यह अधिक आसान और अधिक कुशल होगा। निश्चित रूप से – nycdan

+0

मैं कर सकता हूं। लेकिन मुझे वह परिणाम नहीं मिलेगा जो मुझे चाहिए। दर्शक को उनमें से किसी एक को चेक करने से पहले सभी तत्वों को अनलर्टेड करने की आवश्यकता होती है। – khvn

+0

गोचा। इस पर झुकाव करना होगा। किसी को भी किसी भी मामले में जल्दी से एक अच्छा समाधान के साथ होगा। – 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

मुझे लगता है कि यह काम सकता था

$("input:!checked"); 

साथ ही आप वहाँ में एक वर्ग चयनकर्ता डाल करने के लिए कर सकते हैं। अनियंत्रित चयनकर्ता क्या आप के बाद कर रहे हैं है:

फिर एक .each तत्वों

+0

क्या आप वाकई वैध JQuery मान्य हैं? मैं इसके साथ थोड़ा गड़बड़ कर रहा हूं और इसे काम नहीं कर सकता। लेकिन देर हो चुकी है और मैं थक गया हूँ :) –

+0

यह मेरे लिए काम नहीं करता है। मेरा मानना ​​है कि आपको "इनपुट: नहीं (: चेक किया गया)" का उपयोग स्वीकार किया जाना चाहिए जैसा कि स्वीकृत उत्तर में है – ThdK

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

जाहिर तत्व आप का उपयोग आप पर निर्भर है, लेकिन साथ कुछ करने के लिए करते हैं।

5

इस प्रयास करें (यह भी देखें मेरी jsfiddle):

$('input').not(':checked') 
संबंधित मुद्दे