2015-09-26 4 views
9

मैं एक और प्लगइन से select2 to use as a tagging plugin पर माइग्रेट कर रहा हूं लेकिन एक अंतर है जिसे मैं समझने की कोशिश कर रहा हूं कि चयन 2 का समर्थन कर सकता है या नहीं।टैग के साथ select2 jquery प्लगइन के साथ: सच है, आप पहले से चुने गए ड्रॉपडाउन में विकल्पों को दिखाने से कैसे रोक सकते हैं?

एक उदाहरण देखें। कहते हैं कि विकल्प (Ajax अनुरोध से सर्वर साइड वापस आ रहा) की मेरी सूची

"Dog", "Cat", "Monkey", "Giraffe" 

मैं उपयोग कर रहा हूँ पुराने प्लगइन में है, के बाद मैं विकल्पों में से एक का चयन (देता है कहते हैं कि "बिल्ली") की सुविधा देता है और यह में दिखाई देता है टेक्स्टबॉक्स, अगली बार जब मैं एक ही आंशिक स्ट्रिंग ("सीए" कहता हूं) की खोज करता हूं, तो यह "टी" है "कैट" विकल्पों के ड्रॉपडाउन में दिखाई देता है (जैसा कि यह पता है कि आपने इसे पहले ही चुना है)

ऐसा लगता है कि चयन 2 अभी भी ड्रॉपडाउन में आइटम दिखाता है, भले ही आपने इसे पहले से चुना है। चयन 2 आपके द्वारा दर्ज किए जाने के बाद प्रवेश करने से रोकता है लेकिन यह थोड़ा अनजान लगता है इसलिए मैं यह पता लगाने की कोशिश कर रहा हूं कि कोई रास्ता है या नहीं चयन 2 के लिए उसी व्यवहार को दोहराने के लिए अन्य प्लगइन से ior (जहां विकल्प भी दिखाई नहीं देते हैं)

इस काम का सही उदाहरण के रूप में, एक प्रश्न का स्टैक ओवरफ्लो टैग अनुभाग भी सही काम करता है। अगर मैं इस प्रश्न के लिए टैग की मेरी सूची में "jquery" जोड़ता हूं और फिर "jquery" की खोज करता हूं, तो यह DOESN "टी दिखाता है कि सूची में (जैसा कि इसे पहले से चुना गया है)। यही वह व्यवहार है जिसे मैं देख रहा हूं के लिए

यहाँ है मेरे वर्तमान Select2 कोड:।

एचटीएमएल:

<select id="Tags" name="Tags" multiple="multiple"> 
</select> 

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

function SetupAppTags() { 
$("#Tags").select2({ 
    theme: "classic", 
    width: "98%", 
    tags: true, 
    ajax: { 
     url: "/Tag/Search", 
     dataType: 'json', 
     delay: 300, 
     data: function(params) { 
      return { q: params.term }; 
     }, 
     processResults: function(data, params) { 
      return { results: data }; 
     }, 
     cache: false 
    }, 
    escapeMarkup: function(markup) { return markup; }, 
    minimumInputLength: 3, 
    templateResult: tagFormatResult, 
    templateSelection: tagSelectionResult 
}); 
} 

function tagFormatResult(tag) { 

    if (tag.loading) { 
    return "Loading . . ."; 
} else { 
    if (tag.name) { 
     return tag.name; 
    } 
    return tag.text + " [NEW]"; 
} 
} 

function tagSelectionResult(tag) { 
    if (tag.name) { 
    return tag.name; 
    } 
    return tag.text; 
} 

मुझे लगता है कि किसी भी तरह टेम्पलेट में रीसेट फ़ंक्शन झूठी वापसी करने का कोई तरीका है या कुछ आइटम उस शो को दिखाने के लिए नहीं है यदि यह पहले से ही चुना गया है। संभव कुछ इस तरह (कुछ भी नहीं मिल सकता है ऑनलाइन या डॉक्स में) है

उत्तर

5

यह का उपयोग कर चयनित विकल्पों को छिपाने के लिए की जरूरत है लगता है जैसे आप a custom matcher देख रहे हैं। एक का उपयोग करने से आप इसे उपयोगकर्ता को प्रदर्शित करने से पहले ड्रॉपडाउन आइटम फ़िल्टर कर सकते हैं।

var $t = $('#target'); 
 
$t.select2({ 
 
    multiple: true, 
 
    tags: true, 
 
    data: ["Pasty", "Pasta", "Posters"], 
 
    matcher: function(params, option) { 
 
    var selected = $t.select2('data'); 
 
    var optionSelected = selected.some(function(item) { 
 
     return (item.text === option.text); 
 
    }); 
 
    if (optionSelected) return false; 
 
    return option; 
 
    } 
 
});
#target { 
 
    width: 100%; 
 
}
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="//cdnjs.cloudflare.com/ajax/libs/select2/4.0.0/js/select2.min.js"></script> 
 
<link href="//cdnjs.cloudflare.com/ajax/libs/select2/4.0.0/css/select2.min.css" rel="stylesheet" /> 
 
<select id="target"></select>

+0

क्या आप जानते हैं कि क्या टेम्पलेट में निरर्थक वापसी के विपरीत कस्टम मैचर बनाम अंतर के बीच अंतर? – leora

+0

@ स्लोरा मैंने दस्तावेज़ों को देखा और कुछ डीबगिंग किया, दोनों व्यवहार्य विकल्प हैं क्योंकि वे कुछ हद तक डुप्लिकेट कार्यक्षमता प्रदान करते हैं। दस्तावेज़ों से: _ "[चयन 2] 'matcher' का उपयोग यह निर्धारित करने के लिए करता है कि [प्रत्येक परिणाम] प्रदर्शित होना चाहिए।" _ _ "' TemplateResult' भी' शून्य 'वापस कर सकता है, जो विकल्प को प्रदर्शित होने से रोक देगा परिणाम सूची। "_ ताकि आप देख सकें, वे उपयोगकर्ता को विभिन्न मार्गों के माध्यम से एक ही चीज़ करने की अनुमति देते हैं। पुस्तकालय इस तरह डिज़ाइन क्यों किया गया था, यह स्पष्ट नहीं है, लेकिन यदि आप केवल एक या दूसरे को मामूली विवरण में बदलना चाहते हैं तो इसका कारण शायद उपयोग में आसान है। – Nit

+1

अनुवर्ती के लिए धन्यवाद – leora

0

आप templateResult समारोह को बदलने पर गौर करना चाहिए ...

templateResult समारोह एक स्ट्रिंग पाठ वाले होने के लिए वापस आ जाएगी प्रदर्शित, या एक ऑब्जेक्ट (जैसे एक jQuery ऑब्जेक्ट) जिसमें डेटा प्रदर्शित किया जाना चाहिए। यह शून्य भी लौटा सकता है, जो विकल्प सूची में विकल्प को प्रदर्शित होने से रोक देगा।

https://select2.github.io/options.html#templateSelection

+1

धन्यवाद जेम्स। मैंने समाधान के साथ अपने उत्तर को अद्यतन किया है जो काम करता है। कृपया मुझे बताएं कि क्या आपको मेरे समाधान के साथ कोई समस्या दिखाई दे रही है या कोई अन्य सुझाव है – leora

+0

असल में, मैंने अभी उपरोक्त उत्तर को महसूस किया है जिसे मैंने आपके प्रश्न में जोड़ा है DOESN "टी काम करता है जैसे कि आप एक टैग हटाते हैं जो अभी भी सूची में दिखाई देता है ताकि आपको मिल सके एक मुद्दा जहां आप एक टैग हटाते हैं और इसे वापस जोड़ना चाहते हैं, तो यह आपको अनुमति नहीं देता है .. तो मैं ड्रॉइंग बोर्ड पर वापस आ गया हूं। क्या आप जानते हैं कि मैं कैसे रोक सकता हूं? – leora

+0

क्षमा करें मैं नहीं करता :(मैंने पहले कभी इसका उपयोग नहीं किया है, लेकिन प्रलेखन पढ़ने से ऐसा लगता है कि यह काम करेगा – JamesHalsall

-1

आप नीचे दिए गए की तरह इस लक्ष्य को हासिल कर सकते हैं,

आप सीएसएस

$('select').select2();
.select2-container--default .select2-results__option[aria-selected=true] { 
 
    display: none; 
 
}
<link href="//cdnjs.cloudflare.com/ajax/libs/select2/4.0.0/css/select2.min.css" rel="stylesheet" /> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="//cdnjs.cloudflare.com/ajax/libs/select2/4.0.0/js/select2.min.js"></script> 
 

 
<select id="Tags" name="Tags" multiple="multiple"> 
 
    <option value="1">first</option> 
 
    <option value="2">second</option> 
 
    <option value="3">third</option> 
 
    <option value="4">fourth</option> 
 
</select>

+2

यह एक चाल है जो काम करता है, लेकिन यह कुंजीपटल चयन की तरह एक और समस्या का कारण बन सकता है। –

+0

@ मार्कोसपेरेज़गुड सहमत हैं .. – jlocker

+0

अरे, चिंता न करें, मैं इसे एक प्रोजेक्ट में बनाएं और यह काम करता है, लेकिन अन्य स्थितियों में मैं इस चाल को नहीं लिख सकता। ओपी की जरूरतों के आधार पर। शुभकामनाएँ! –

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