2012-11-05 16 views
45

का उपयोग कर साफ़ ड्रॉपडाउन मैं शानदार Select2 लाइब्रेरी का उपयोग करके प्रोग्राम को एक ड्रॉप डाउन साफ़ करने की कोशिश कर रहा हूं। चयनविकल्प का उपयोग कर ड्रॉप डाउन को दूरस्थ अजाक्स कॉल से गतिशील रूप से भर दिया गया है।jQuery चयन 2

HTML:

<input id="remote" type="hidden" data-placeholder="Choose Something" /> 

जावास्क्रिप्ट:

 var $remote = $('#remote'); 

     $remote.select2({ 
      allowClear: true, 
      minimumInputLength: 2, 
      query: function(options){ 
       $.ajax({ 
        dataType: 'json', 
        url: myURL + options.term, 
        error: function(jqXHR, textStatus, errorThrown){ 
         smoke.alert(textStatus + ": server returned error on parsing arguments starting with " + options.term); 
        }, 
        success: function(data, textStatus, jqXHR){ 
         var results = []; 
         for(var i = 0; i < data.length; ++i){ 
          results.push({id: data[i].id, text: data[i].name}); 
         } 

         options.callback({results: results, more: false}); 
        } 
       }); 
      } 
     }); 

दुर्भाग्य से, $remove.select2('val', '') के आह्वान के बाद अपवाद फेंकता है:

Uncaught Error: cannot call val() if initSelection() is not defined 

मैं attr स्थापित करने की कोशिश की है, की स्थापना val, text और चयन करें 2 विशिष्ट data फ़ंक्शन। ऐसा लगता है कि आदमी को रेडियो बटन में स्पष्ट और काम करने की प्रतीत नहीं होती है। किसी को भी सुझाव मिल गया?

+0

क्या आपने तत्व को खोजने का प्रयास किया और फिर '.remove()' कर रहा था? –

+0

@EH_warch मैं Select2 को स्वयं नहीं हटाना चाहता, केवल सेट किए गए मान को साफ़ करें। – wheaties

+0

मुझे पूरा चयन 2, लेकिन तत्व को हटाने का नहीं है। शायद '$ ('आइटम चयनित') जैसी कुछ। हटाएं()'? या आपका मतलब '$ remote.empty()' करना है? –

उत्तर

72

यह मेरे लिए काम करता है:

$remote.select2('data', {id: null, text: null}) 

यह भी jQuery के साथ काम करता है जब आप स्पष्ट इसे सत्यापित करने में कि जिस तरह से।

- संपादित 2013-04-09

इस प्रतिक्रिया लिखने के समय, यह एक ही रास्ता था। हाल के पैच के साथ, अब एक उचित और बेहतर तरीका उपलब्ध है।

$remote.select2('data', null) 
+2

यह हैकी समाधान का उपयोग करने से काफी बेहतर है। – wheaties

+8

हालांकि यह चयन को साफ़ करता है, मैं प्लेसहोल्डर को फिर से दिखाना चाहता हूं। –

+0

@ साइमनहर्लिमैन यह अच्छा होगा। मैंने प्लेसहोल्डर टेक्स्ट को स्मृति में संग्रहीत किया और फिर इस समाधान का उपयोग करके टेक्स्ट सेट किया। उचित स्टाइल प्राप्त करने के लिए आप 'select2-default' तत्व को 'select2-default' तत्व में भी जोड़ना चाहेंगे। –

32

यह उचित है, select2 चयनित मूल्य को साफ़ करेगा और प्लेसहोल्डर को वापस दिखाएगा।

$remote.select2('data', null) 
+7

के साथ परीक्षण किया गया है 4.0+ – Waclock

+2

पर फिर से काम नहीं कर रहा, 4.0+ ने कई चीजें तोड़ दी! उदाहरण के लिए यह !! –

+0

$ remote.select2.html ('') को 4.0 – wazza

29

Select2 संस्करण के मामले में 4

यह वाक्य विन्यास बदल गया और आप इस तरह लिखने की ज़रूरत:

// clear all option 
$('#select_with_blank_data').html('').select2({data: [{id: '', text: ''}]}); 

// clear and add new option 
$("#select_with_data").html('').select2({data: [ 
{id: '', text: ''}, 
{id: '1', text: 'Facebook'}, 
{id: '2', text: 'Youtube'}, 
{id: '3', text: 'Instagram'}, 
{id: '4', text: 'Pinterest'}]}); 
+1

में चाल करना चाहिए आप मेरे नायक हैं! धन्यवाद, यह निश्चित संस्करण 4.0 चयन 2 ('डेटा', शून्य) के साथ रीसेट नहीं कर रहा है; –

+0

@ SruitA.Suk संस्करण 4.0.0 के लिए काम नहीं किया। कोई उपाय? –

15

आप इस छोटे से संकेतन का उपयोग कर सकते हैं Select2 संस्करण 4 का उपयोग करना:

$('#remote').html('').select2({data: {id:null, text: null}}); 

यह नल आईडी और टेक्स्ट के साथ एक जेसन सरणी बनाता है जो सृजन पर चयन 2 पर है लेकिन पहले,के साथपहले संग्रहीत परिणामों को खाली करता है।

+1

यह पूरी तरह से काम कर रहा है। चयन 2 संस्करण 4 में, $ remote.select2 ('डेटा', शून्य) काम नहीं कर रहा है। – ruvi

+0

चयन 2 4.0.2 के साथ पूरी तरह से काम करता है। –

+1

यह काम करता है लेकिन प्लेसहोल्डर –

13

लिए Select2 संस्करण 4 आसानी से इस का उपयोग करें:

success: function(data, textStatus, jqXHR){ 
    $('#remote').change(); 
       } 
+1

यह jQuery का उपयोग कर रहा है [खाली] (https://api.jquery.com/empty/) सभी बच्चे वस्तुओं को हटाने के लिए फ़ंक्शन, जिनके पास अनचाहे परिणाम हो सकते हैं। – Aegix

+0

कृपया और बताएं, कौन से परिणाम? जब भी मैं इसका इस्तेमाल करता हूं यह मेरे लिए काम करता है। – Amin

+2

यह कुछ हद तक काम करता है, लेकिन यह आपके द्वारा चुने गए डीओएम तत्व से सभी बाल तत्वों को हटा देता है। Select2 विशिष्ट DOM तत्वों पर निर्भर करता है जो इसे अतिरिक्त कार्यक्षमता/व्यवहार देने के लिए बनाता है। तो बस चेतावनी दें कि यह रीसेट करने के लिए एक चयन 2 तंत्र नहीं है, इसके बजाय आप चयन 2 प्रारंभ करने के बाद डीओएम में हेरफेर कर रहे हैं, इसलिए यह कार्यक्षमता के नुकसान का कारण बन सकता है। मुझे इस प्रश्न @ http://stackoverflow.com/questions/17957040/reset-select2-value-and-show-placeholdler के लिए सबसे अच्छा जवाब मिला। – Aegix

1

:

$('#remote').empty(); 

ajax कॉल के साथ चयन तत्व को आबाद करने के बाद, आप कोड की इस पंक्ति सफलता अनुभाग में अद्यतन करने के लिए सामग्री की आवश्यकता हो सकती मुझे जवाब मिला (उपयोगकर्ता 780178 पर प्रशंसा) मैं इस अन्य प्रश्न में देख रहा था:

Reset select2 value and show placeholdler

$("#customers_select").select2("val", ""); 
+0

कृपया मुझे बताएं कि मुझे एक अलग SO प्रश्न को जोड़ने के लिए कुछ अलग करना चाहिए .... इस पर नया :-) – Aegix

3

ये दोनों मेरे लटकती स्पष्ट करने के लिए काम करते:

.select2('data', null) 
.select2('val', null) 

लेकिन महत्वपूर्ण नोट: मान रीसेट नहीं होता है, .val() पहला विकल्प वापस आ जाएगी, भले ही यह चयनित नहीं है । मैं चयन 2 3.5.3

3

विधि प्रस्तावित @Lelio Faieta मेरे लिए काम कर रहा है, लेकिन क्योंकि मैं bootstrap theme का उपयोग करता हूं, यह चयन 2 के लिए सभी बूटस्ट्रैप सेटिंग्स को हटा देता है। इसलिए मैं कोड निम्नलिखित प्रयोग किया है:

$("#remote option").remove(); 
+0

जो काम करने वाली एकमात्र चीज थी! धन्यवाद – Chris

+0

दूसरों की कोशिश की, यह मेरे लिए काम किया। –

6

आप का उपयोग करना चाहिए यह एक:

$('#remote').val(null).trigger("change"); 
+0

डीबग मोड में फेंकने वाले बहिष्कृत संदेश के अनुसार यह अब से सही समाधान है: "' select2 ("val") 'विधि को हटा दिया गया है और बाद में चयन 2 संस्करणों में हटा दिया जाएगा।' Element element.val() 'इसके बजाय" –

2

मैं देर से एक छोटे से हूँ, लेकिन यह है कि क्या पिछले संस्करण (4.0.3) में काम कर रहा है है:

$('#select_id').val('').trigger('change'); 
+0

yup, मेरे लिए काम किया! – awebartisan

0

चूंकि उनमें से कोई भी मेरे लिए काम नहीं करता है (चयन 2 4.0.3) std select way चला गया है।

$remote.select2.val(''); 
$remote.select2.html(''); 
selectedValues = []; // if you have some variable where you store the values 
$remote.select2.trigger("change"); 

कृपया ध्यान दें कि हम प्रारंभिक प्रश्न के आधार पर Select2 का चयन करें:

for(var i = selectbox.options.length - 1 ; i >= 0 ; i--) 
    selectbox.remove(i); 
0
> 4.0 से आदेश वास्तव में Select2 आप निम्न कार्य करने होंगे साफ करने के लिए में

। आपके मामले में शायद आप चयन 2 का चयन एक अलग तरीके से करेंगे।

उम्मीद है कि यह मदद करता है।

संबंधित मुद्दे