ajax

2015-10-12 6 views
7

साथ Select2 डिफ़ॉल्ट विकल्प मैं अगले एचटीएमएल संरचनाajax

<select class="change_item_dropdown_ajax form-control" id="item_id" name="item_id" onchange="updateData(this, this.value, 16)" > 
<optgroup label="System Data"> 
    <option value="17">Test</option> 
    <option selected="selected" value="18">System</option> 
</optgroup> 
</select> 

जावास्क्रिप्ट है

$(".change_item_dropdown_ajax").select2({ 
     ajax: { 
      url: "get_user_items", 
      dataType: 'json', 
      delay: 250, 
      theme: "classic", 
      data: function (params) { 
       return { 
        q: { name_contains: params.term } // search term 
       }; 
      }, 
      processResults: function (data) { 
       return { 
        results: data 
       }; 
      }, 
      cache: true 
     }, 
     allowClear: true, 
     placeholder: '--- Please select item ---', 
     minimumInputLength: 1 
    }); 

मैं संभावना बनाने के ग्राहक <optgroup label="System Data"> आइटम के साथ कुछ डिफ़ॉल्ट प्रणाली विकल्प देखने के लिए के लिए, लेकिन यह भी करने की क्षमता जोड़ना चाहते हैं अपने स्वयं के सामान से खोज AJAX प्रश्नों को बनाओ।

हालांकि Select2 बंधन के बाद यह <optgroup label="System Data">...</optgroup> प्रदर्शित नहीं करता है,

Select2 विकल्पों खाली हैं और यह केवल प्रदर्शित करता है का संकेत मिलता है "कृपया 1 या अधिक वर्ण दर्ज"।

यह भी स्पष्ट नहीं है कि ऐसा करना संभव है, धन्यवाद।

युपीडी select2 removes default options when using ajax

चयन -2 से संबंधित जब ajax एडाप्टर का उपयोग कर विकल्प को हटा।

UPD2 GitHub मुद्दे https://github.com/select2/select2/issues/3828

+1

तो, आप मूल रूप से एक ऐसा समूह समूह बनाना चाहते हैं जो हमेशा दिखाई दे, चाहे ग्राहक क्या खोजता है, और उसके नीचे, किसी अन्य ऑप्टग्रुप में, आप खोज परिणामों को देखना चाहते हैं? –

+0

उपयोगकर्ता को केवल इनपुट इनपुट के तहत ड्रॉपडाउन में डिफ़ॉल्ट मान देखना चाहिए यदि इनपुट – Fivell

उत्तर

2

आप एक <optgroup> जो हमेशा दिखाई दे रहा है करना चाहते हैं, भले ही क्या एक और <optgroup> में के लिए, और उसके नीचे, ग्राहक खोज करता है, तो आप खोज परिणाम देखना चाहते हैं, की कोशिश यह बाहर:

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

** प्रश्न टिप्पणी **

$q=$_REQUEST['q']; //the query string passed, note, that if you have minimumInputLength set, until that inputLength is reached, this part of the code won't run, so if you require the minimumInputLength, you should play with the templateResult option of select2 
if (empty($q)) { 
    $results=array(); 
    $result[0]=array(); //an optgroup to display when no query was sent 
    $result[0]['text']='System Data'; 
    $result[0]['children']=array(); 
    // populate your first optgroup here, using the format which you are sending to select2. 
} else {  
    $result[0]=array(); //an optgroup for results for the users searches 
    $result[0]['text']='User results'; 
    $result[0]['children']=array(); 
    //populate the children array with the search related results 
} 

// json_encode the $result array, and return it 

मैं इसे एक समान कोड है, जो मेरी तरफ से flawlesly काम करता है का उपयोग कर रहा है, लेकिन आपके अनुरोध के अनुसार संशोधित कोड यह संभव है कि काम करने से पहले कुछ अन्य चीजों को स्थापित किया जाना चाहिए (मैंने कुछ महीने पहले कोड लिखा था, और मुझे याद है कि मुझे यह पता लगाने में कठिन समय था), अगर यह दृष्टिकोण काम नहीं करता है, तो मुझे सूचित करें , और मैं यह देखने के लिए अपने कोड में देखूंगा कि मैंने इसे कैसे किया।

+0

एडम में कोई टेक्स्ट नहीं है, तो यह सर्वर-साइड समस्या नहीं है, उपयोगकर्ता को खोज से पहले डिफ़ॉल्ट डेटा देखना चाहिए। – Fivell

+0

इस समाधान के साथ, उपयोगकर्ता डिफ़ॉल्ट डेटा देखेंगे, मुझे किसी अन्य समाधान की जानकारी नहीं है। यदि आप डिफ़ॉल्ट इनपुट केवल तभी दिखाना चाहते हैं जब खोज इनपुट खाली हो, तो क्वेरी खाली होने पर बस उस डेटा सर्वर-पक्ष को वापस कर दें। चयन 2 हर बार एक नई खोज बनने पर '