jQuery

2011-04-26 8 views
7

के साथ चुनिंदा मेनू में विकल्प में चयनित विशेषता जोड़ें मैं बदसूरत डिफ़ॉल्ट चयनों को प्रतिस्थापित करने के लिए एक चयन मेनू प्लगइन बना रहा हूं और विभिन्न ओएस में सुसंगत हूं।jQuery

यहाँ डेमो (केवल फ़ायरफ़ॉक्स और वेबकिट)
http://spacirdesigns.com/selectMenu/

यह पहले से ही काम कर रहा है है, लेकिन मैं परेशानी हो रही विकल्प के लिए "चयनित" विशेषता बताए हूँ। कोड किसी अन्य विशेषता के साथ काम करता है लेकिन मैं इसे चयनित विशेषता के साथ काम नहीं कर सकता।

यह काम करता है:

select.find('option') 
    .removeAttr('whatever') 
    .eq(index).attr('whatever', 'hello'); 

यह नहीं करता है:

select.find('option') 
    .removeAttr('selected') 
    .eq(index).attr('selected', 'selected'); 

और यहाँ कोड अब तक बताया गया है:

(function($){ 

     $.fn.selectMenu = function() { 

      var select = this; 
      select.hide(); 

      var title = select.attr('title'); 
      var arrow = 'img/arrow.png'; 
      var items = ''; 

      select 
       .children('option') 
       .each(function(){ 
        var item = $(this).text(); 
        if ($(this).val() != '') { 
         $(this).attr('value', item); 
        } 
        items += '<li>' + item + '</li>' 
       }); 

      var menuHtml = 
       '<ul class="selectMenu">' + 
       '<img src="' + arrow + '" alt=""/>' + 
       '<li>' + title + '</li>' + 
       '<ul>' + items + '</ul>' + 
       '</ul>'; 

      select.after(menuHtml); 

      var menu = $(this).next('ul'); 
      var list = menu.find('ul'); 

      menu 
       .hover(function(){}, function(){ 
        list.hide(); 
       }) 
       .children('li').hover(function(){ 
        list.show(); 
       }); 

      menu.find('ul li').click(function(){ 
       var index = $(this).index(); 
       menu.children('li').text($(this).text()); 
       select.find('option') 
        .removeAttr('selected') 
        .eq(index).attr('selected', 'selected'); 
       list.hide(); 
      }); 

     }; 

    })(jQuery); 
+0

क्या आपने '.attr ('चयनित', सत्य) का उपयोग करने का प्रयास किया है? – NT3RP

+0

मुझे पता है कि यह प्लगइन चयनित का समर्थन करता है: http://programmingdrunk.com/current-projects/dropdownReplacement/#use – mkoryak

+0

'.attr ('चयनित', सत्य) 'या तो काम नहीं करता है। – elclanrs

उत्तर

3

बाहर चेक this previous detailled answer on SO:

आप वास्तव में चयनित विशेषता के साथ HTML उत्पादन maitain चाहते हैं, और न केवल jQuery सही SelectedIndex चयन तत्व में यह विशेषता maitaining है, तो आप (मूल settAttr साथ हैक कर सकते हैं) समारोह :

select[0].options[select[0].selectedIndex].setAttribute('selected','selected'); 

लेकिन जैसे ही आप() या वैल के लिए jQuery तरीकों का उपयोग कर रखना ': चयनित', आप किसी भी समस्या मिल should'nt, आप समस्या हो सकती केवल यदि आप चयनित विशेषता ढूंढने के लिए एचटीएमएल पार्स करने गए थे, ऐसा कुछ जो आपको नहीं करना चाहिए, कभी नहीं।

+0

तहंक आप। मुझे यह अन्य पोस्ट भी मिला, बहुत उपयोगी http://stackoverflow.com/questions/3729741/jquery-cannot-set- चयनित- चयन-via-attr-on-option-elements – elclanrs

+0

हाँ, यह एक सही संदर्भ है। – regilero

0

अपने नवीनतम टिप्पणी को ध्यान में रखते मुझे लगता है आपकी समस्या फ़ायरबग है , आपका कोड नहीं। यह "चयनित" को छोड़कर अन्य विशेषताओं के साथ क्यों काम करता है, यह है कि ड्रॉपडाउन से एक विकल्प का चयन करने से डीओएम में चयनित विशेषता को संशोधित नहीं किया जाता है। मैं आपको आश्वासन देता हूं, आपके कोड में कुछ भी गलत नहीं है।

23

jQuery 1.6 के रूप में "डीओएम गुणों को पुनर्प्राप्त करने और बदलने के लिए जैसे तत्वों की जांच, चयनित, या अक्षम स्थिति, .prop() विधि का उपयोग करें।"

$("#someselect option[value=somevalue]").prop("selected", "selected") 
+2

यह शीर्ष उत्तर होना चाहिए, दूसरे की तुलना में बहुत आसान, पुराने –

+0

धन्यवाद @ सिडारसी। इसने मेरी बहुत मदद की। निश्चित रूप से यह शीर्ष पर जाना चाहिए। – offshore

+0

यह '.prop (" चयनित ", सत्य नहीं होना चाहिए '? जैसा कि मुझे याद है, इस मामले के लिए पुराने दृष्टिकोण का उपयोग करते समय इसे '.attr (" चयनित "," चयनित ") होना चाहिए। – rabudde