2015-04-17 11 views
13

के माध्यम से अपना डेटा पुनर्प्राप्त करता है, मैं चयन 2 संस्करण 4.0 का उपयोग कर रहा हूं, और मैं एक चुनिंदा बॉक्स में प्रोग्रामेटिक चयन करने की कोशिश कर रहा हूं जो एजेक्स कॉल से अपना डेटा प्राप्त करता है।चुनिंदा 2 का प्रोग्रामेटिक चयन जो अजाक्स

प्रलेखन में, मैंने पाया कि एक नियमित चयन 2 के लिए प्रोग्रामेटिक रूप से मूल्य कैसे सेट करें, लेकिन मैं यह नहीं समझ सकता कि AJAX चयन के साथ इसे कैसे किया जाए।

अगर मैं सही ढंग से याद, पुराने संस्करण में, तो आप इस आदेश के साथ Select2 के एक डेटा पारित करके वर्तमान मूल्य सेट कर सकते हैं:

jQuery("selectbox").select2("data", data) 

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

क्या यह विकल्प हटा दिया गया था, या बस बदला गया? मुझे दस्तावेज़ में यह कहां मिल सकता है, या मैं वांछित व्यवहार कैसे प्राप्त कर सकता हूं?

+3

किसी भी बेला डेमो? – nirmal

उत्तर

8

इसे प्राप्त करने का एकमात्र तरीका है, पहले उस डेटा के साथ चुनिंदा डोम में <option> जोड़ें, और बाद में, इसे चुनें, जैसे कि आप नियमित चयन बॉक्स के साथ करेंगे। यह उनके जीथब परियोजना पृष्ठ पर केविन-ब्राउन से भी आधिकारिक उत्तर था।

https://github.com/select2/select2/issues/3273

तो, मूल रूप से, यदि आप जानते हैं कि आप चयन करना चाहते हैं, आप आसानी से एक <option> तत्व से बना सकते हैं, मूल सलेक्ट बॉक्स में जोड़ने, और फिर यह मान द्वारा:

var option=jQuery("<option>").attr("value","your_id_here").html("your_text_here"); 
jQuery("selectbox").append(option); 
jQuery("selectbox").val("your_id_here").trigger("change"); 
+0

यही वह है जो मैं अपने जेएस कोड से, सूची को पॉप्युलेट करने से बचने की उम्मीद कर रहा था। मैं AJAX लोड करने के लिए select2 से पूछना चाहता था कि जब क्लिक किया जाए, तो मेरे जेएस कोड में नए लोड किए गए परिणामों में से एक का चयन करें। ऐसा लगता है कि यह संभव नहीं है? –

+1

पहला भाग जो आपको चाहिए, PERHAPS संभव है (मुझे इसे देखना है), लेकिन चयन भाग केवल उपर्युक्त समाधान (कम से कम 4.0 संस्करण के साथ) द्वारा उपलब्ध है। शायद इस भयानक प्लगइन वाले लोगों में बाद के संस्करणों में एक प्रोग्रामेटिक समाधान शामिल होगा, आइए इसके लिए आशा करें :) इस बीच, मैं जांच करूंगा कि जावास्क्रिप्ट के माध्यम से खोज बॉक्स को पॉप्युलेट करना है या नहीं, बिना किसी क्लिक के संभव है, या नहीं, मैं जैसे ही मैं कर सकता हूं मेरे निष्कर्षों के साथ वापस आऊंगा –

4

मैं भी इस के लिए एक पूर्ण जवाब जानने के प्यार होता है, लेकिन यहां एक आंशिक समाधान है:

$('#select2-control-id').val('item-id').trigger('select2:select').trigger('change'); 

यह केवल select2 पहले से ही आइटम आप के लिए पूछ रहे हैं लोड हो जाए, तो काम करने के लिए लगता है - यह है यानी एक जिसे आपने पहले ही क्लिक किया है। आप भी वास्तव में एक आप प्रोग्राम बाद में चयन करना चाहते हैं पर क्लिक किया है करने के लिए है -

न केवल आप मैन्युअल रूप से लटकती खोला तो यह AJAX के माध्यम से आइटम के पहले पृष्ठ लोड होगा है की क्या ज़रूरत है।

ऐसा प्रतीत होता है क्योंकि यह वास्तव में <options> को अंतर्निहित select तत्व में जोड़ता है जब आप वास्तव में उन पर क्लिक करते हैं।

मैं AJAX परिणामों के पहले पृष्ठ को लोड करने के लिए select2 को प्रोग्रामेटिक रूप से बताने का कोई तरीका नहीं देख सकता।

0

आप इसे आजमा सकते हैं।

var dataString = 'id='+$value; 
    var promise = sendAjaxFunction('load_form.php?k=1',dataString); 
    $("#LoadMachine").html("<img src='images/ajax-loader.gif' />"); 
    promise.success(function (data) { 
     $("#LoadMachine").html(data); 
     $("#MachineName").select2({ 
      placeholder: 'Select Operation Name ...', 
      allowClear: true 
     }); 
     return false; 
    }); 

div #LoadMachine में डेटा लोड करें और नतीजतन आप चयन 2 लोड कर सकते हैं।

1

यह रूप में छिपा <select/> बॉक्स में हेरफेर करना आसान है:

//set first option as selected 
$("select [value='0']").attr("selected","selected"); 
$("select").trigger("change"); 

Demo

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