2012-12-11 12 views
9

पर jQuery चयन 2 टैग मैं अपने आवेदन में जीमेल-शैली ई-मेल पते फ़ील्ड बनाने के लिए Select2 का उपयोग कर रहा हूं। यह एक मामले को छोड़कर महान काम करता है: जब उपयोगकर्ता ई-मेल पते में टाइप करता है और उसके बाद कोई स्थान या कॉमा नहीं डालता है, और एंटर या टैब नहीं दबाता है। उदाहरण के लिए, यदि वे केवल एक ई-मेल पता टाइप करते हैं और फिर फॉर्म में अगले फ़ील्ड का चयन करने के लिए माउस का उपयोग करते हैं, तो उनके द्वारा टाइप किए गए ई-मेल पते को हटा दिया जाता है।ब्लू

मेरे पास एक उदाहरण jsfiddle here है जो समस्या को दर्शाता है।

यहाँ कैसे मैं अपने छिपे हुए इनपुट पर Select2 सेट कर रहा हूं है:

$(function(){ 
    $('input').select2({ 
     tags: [], 
     width: "300px", 
     dropdownCss: {display: 'none'}, 
     tokenSeparators: [',', ', ', ' '] 
    }); 
}); 

वहाँ मुझे Select2 स्थापित करने के लिए इतना है कि onBlur यह सिर्फ जो कुछ भी छोड़ दिया है लेता है और वर्तमान में एक टैग नहीं है और के लिए एक रास्ता है यह एक बनाता है?

उत्तर

17

अब यह 'selectOnBlur' विकल्प का उपयोग कर चयन 2 लाइब्रेरी के संस्करण 3.3 में समर्थित है।

+2

क्या आप एक उदाहरण दिखा सकते हैं। –

+0

यह चयन 2 4.0.1-rc.1: '$ .fn.select2.defaults.set (" selectOnBlur "," true ") के साथ काम नहीं कर रहा है;' – EriF89

+0

विकल्प का नाम बदलकर 'selectOnClose' कर दिया गया है – kartikluke

1

मैं न वास्तव में समझ में आ आप क्योंकि आप ईमेल के बारे में बात कर रहे हैं यहाँ करने के लिए कोशिश कर रहे हैं:

jQuery(element.val().split(",")).each(function() { 
       data.push({id: this, text: this}); 
      }); 

लेकिन आप इस के बजाय की कोशिश कर सकते:

var splitted = element.val().split(","); 
for(var i=0,z=splitted.length;i<z;i++) 
    data.push({id: splitted[i], text: splitted[i]}); 

वैसे, अपने jsfiddle है uncomplete।

+0

मैंने उन सेटिंग्स को हटा दिया है क्योंकि वे समस्या के लिए प्रासंगिक नहीं हैं और ऊपर मेरी पहेली और कोड अपडेट किया है। – davertron

3

मेरे पास select2 (टैग मोड) और सबमिट बटन वाला एक फॉर्म था। डिफॉल्ट रूप से जब उपयोगकर्ता टैग को टाइप करता है, ड्रॉप डाउन से टैग का चयन किए बिना या ट्रिगरिंग कंट्रोल कुंजियों में से किसी एक को दबाए बिना, उपयोगकर्ता प्रविष्टि खो जाएगी क्योंकि प्लगइन धुंधला ईवेंट पर उत्पन्न इनपुट डोम ऑब्जेक्ट को बंद कर देता है।

var val=this.search.val(); 
if($.trim(val)!='') this.onSelect({id:val,text:val}); 

एक बार धुंधला समारोह कहा जाता है, इसके बाद के संस्करण कोड जांच करता है कि उपयोगकर्ता प्रविष्टि:

इस समस्या का मेरे त्वरित सुधार प्लगइन कलंक समारोह को हैक करने और निम्नलिखित लाइनों को जोड़ने के लिए किया गया था। यदि कोई है तो यह ट्रिगर ईवेंट का चयन करता है और आवश्यक वस्तु भेजता है। जिस ऑब्जेक्ट को मैं पास कर रहा हूं वह टैगिंग मोड में केवल चयन 2 के लिए उपयुक्त है और यदि आप select2 v3.2 का उपयोग करते हैं तो यह लाइन लाइन 1311 पर सारस चयन 2 के धुंध समारोह की शुरुआत में डाली जा सकती है। मुझे उम्मीद है कि यह आपको इस पर विचार करेगा कि कैसे अनुकूलित करें विजेट आपकी जरूरतों के हिसाब से।

+1

जबकि मुझे यह कार्यक्षमता प्राप्त करने के लिए लाइब्रेरी को स्वयं संशोधित करना पसंद नहीं है, यह एकमात्र उत्तर है जो अब तक काम करता है। मैंने जो अतिरिक्त परिवर्तन किया था, वह "ऑनफ्लुस: सच्चाई" को "ऑनक्लेक्ट" विधि के माध्यम से पास करना था, और उसके बाद नीचे की जांच करें और "फोकसशर्च" पर कॉल न करें, क्योंकि टेक्स्ट में प्रवेश करना वास्तव में परेशान है, इसलिए एक और टेक्स्ट फ़ील्ड पर क्लिक करें और उसके बाद फिर से केंद्रित पुराने select2 बॉक्स है। – davertron

+0

@Ramin और @davertron के लिए धन्यवाद! कुछ कारणों से, मैं select2 के अंतिम संस्करण का उपयोग नहीं कर सकता (एक बाहरी क्लिक कुछ भी बंद नहीं करेगा) इसलिए मैं v3.2 पर वापस आ जाता हूं और आपके दो लोगों को बनाता हूं। बहुत मुश्किल था क्योंकि मैंने केवल एक छोटा संस्करण तक पहुंचा है। वैसे भी, हैक का अंतिम सारांश, अन्य लोगों के लिए: https://gist.github.com/hartator/6689203 – Hartator

1

4.0.3 के रूप में documentation से:

$('select').select2({ 
    selectOnClose: true 
}); 

इस चयन पर कब्जा और उपयोगकर्ता कहीं और क्लिक करता है यदि किसी टैग का निर्माण करेगा।

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