jQuery

2009-06-17 19 views
76

के साथ टेक्स्ट सामग्री द्वारा विकल्प का चयन करना मैं jquery का उपयोग कर क्वेरीस्ट्रिंग के माध्यम से जो कुछ भी पारित कर चुका हूं उसे ड्रॉपडाउन बॉक्स सेट करना चाहता हूं।jQuery

मैं एक विकल्प में चयनित विशेषता कैसे जोड़ूं जैसे "टेक्स्ट" मान क्वेरी स्ट्रिंग से किसी निश्चित पैरा के बराबर है?

$(document).ready(function() { 
     var cat = $.jqURL.get('category'); 
     if (cat != null) { 
      cat = $.URLDecode(cat); 
      var $dd = $('#cbCategory'); 
      var $options = $('option', $dd); 
      $options.each(function() { 
       if ($(this).text() == cat) 
        $(this).select(); // This is where my problem is 
      }); 
     }; 
    }); 
+0

[jQuery के संभावित डुप्लिकेट - एक के चयनित मान सेट अपने टेक्स्ट विवरण के माध्यम से नियंत्रण का चयन करें] (http://stackoverflow.com/questions/496052/jquery-setting-the-selected-value-of-a-select-control-via-its-text-description) –

उत्तर

171

इस बदलें:

var cat = $.jqURL.get('category'); 
var $dd = $('#cbCategory'); 
var $options = $('option', $dd); 
$options.each(function() { 
if ($(this).text() == cat) 
    $(this).select(); // This is where my problem is 
}); 
इस के साथ

:

$('#cbCategory').val(cat); 

एक चयन सूची पर val() कॉलिंग स्वचालित रूप से, कि मूल्य के साथ विकल्प का चयन करेंगे, यदि कोई हो।

+2

am सक्षम नहीं है इस दृष्टिकोण के साथ कई विकल्प चुनने के लिए? –

+2

यह विधि $ ('# cbCategory') तत्व पर ईवेंट ट्रिगर नहीं करती है। –

+14

यह उत्तर पुराना है। JQuery 1.4 के रूप में, '.val' केवल उनके टेक्स्ट सामग्री द्वारा विकल्पों का चयन करेगा यदि उनके पास 'मान' विशेषता नहीं है। इस प्रकार मामले में जहां विकल्प तत्वों के पास मूल्य गुण होते हैं और वे अपनी टेक्स्ट सामग्री से मेल नहीं खाते हैं, तो यहां प्रदान किया गया उत्तर काम नहीं करेगा। –

32

मैं जानता हूँ कि इस सवाल का बहुत पुराना है, लेकिन अभी भी, मुझे लगता है कि इस दृष्टिकोण क्लीनर होगा:

cat = $.URLDecode(cat); 
$('#cbCategory option:contains("' + cat + '")').prop('selected', true); 

इस मामले आप अभ्यस्त each() के साथ पूरे विकल्पों पर जाने की जरूरत है। हालांकि उस समय तक prop() मौजूद नहीं था, इसलिए jQuery के पुराने संस्करण attr() के लिए मौजूद नहीं था।


अद्यतन

आप क्योंकि आप कई विकल्प मिल सकता है जब contains का उपयोग कर, स्ट्रिंग के मामले में cat अंदर एक आप से मेल करने का इरादा तुलना में एक अलग विकल्प की सबस्ट्रिंग से मेल खाता है निश्चित होना है।

तो फिर तुम उपयोग करना चाहिए:

cat = $.URLDecode(cat); 
$('#cbCategory option') 
    .filter(function(index) { return $(this).text() === cat; }) 
    .prop('selected', true); 
+2

सामग्री को साझा करने और रखने के लिए धन्यवाद! –

20

अपने <option> तत्वों value गुण नहीं है, तो आप सिर्फ .val उपयोग कर सकते हैं:

$selectElement.val("text_you're_looking_for") 

हालांकि, मूल्य गुण आपके <option> तत्वों अगर , या भविष्य में हो सकता है, तो यह काम नहीं करेगा, क्योंकि जब भी संभव हो .val इसके बजाय इसके value विशेषता द्वारा एक विकल्प का चयन करेगा पाठ सामग्री। कोई निर्मित jQuery विधि है कि उसकी टेक्स्ट सामग्री से एक विकल्प का चयन करता है, तो विकल्प value विशेषताओं होगा, तो हम एक सरल प्लगइन के साथ एक अपने आप को जोड़ना होगा:

/* 
    Source: https://stackoverflow.com/a/16887276/1709587 

    Usage instructions: 

    Call 

     jQuery('#mySelectElement').selectOptionWithText('target_text'); 

    to select the <option> element from within #mySelectElement whose text content 
    is 'target_text' (or do nothing if no such <option> element exists). 
*/ 
jQuery.fn.selectOptionWithText = function selectOptionWithText(targetText) { 
    return this.each(function() { 
     var $selectElement, $options, $targetOption; 

     $selectElement = jQuery(this); 
     $options = $selectElement.find('option'); 
     $targetOption = $options.filter(
      function() {return jQuery(this).text() == targetText} 
     ); 

     // We use `.prop` if it's available (which it should be for any jQuery 
     // versions above and including 1.6), and fall back on `.attr` (which 
     // was used for changing DOM properties in pre-1.6) otherwise. 
     if ($targetOption.prop) { 
      $targetOption.prop('selected', true); 
     } 
     else { 
      $targetOption.attr('selected', 'true'); 
     } 
    }); 
} 

बस इस प्लगइन कहीं बाद में शामिल आप पृष्ठ पर jQuery जोड़ते हैं, और उसके बाद

jQuery('#someSelectElement').selectOptionWithText('Some Target Text'); 

विकल्प चुनने के लिए करें।

प्लगइन विधि filter का उपयोग करता है केवल option targetText मिलान बाहर लेने के लिए, और jQuery संस्करण पर निर्भर करता है, या तो .attr या .prop का उपयोग कर इसे का चयन करता है (विवरण के लिए .prop() vs .attr() देखें)।

यहाँ एक JSFiddle है आप इस प्रश्न है, जो यह दर्शाता है कि यह एक केवल एक ही मज़बूती से काम करने के लिए है करने के लिए दिया तीनों जवाब के साथ खेलने के लिए उपयोग कर सकते हैं: http://jsfiddle.net/3cLm5/1/