2011-09-10 11 views
5

यूआई साइट से प्रलेखन का पालन कर रहा है, और कई ट्यूटोरियल देखे और मेरे कोड की तरह काम कर रहा है, यह AJAX की शर्तों की सूची में है, और आप एक का चयन कर सकते हैं और यह मान रखता है और फिर ","। हालांकि, बाद में यह दूसरे मूल्य के लिए फिर से संकेत नहीं देता है।एकाधिक AJAX'd मानों के साथ jQuery स्वत: पूर्ण

इसके अलावा, जब मैं आंशिक प्रवेश करता हूं और कहता हूं कि 10 प्रविष्टियां पॉप अप होती हैं, तो टैबबिंग सिर्फ अगले फॉर्म फ़ील्ड पर जाती है, यह सुनिश्चित नहीं है कि मेरे .bind, शायद एक सेटिंग में क्या गलत है? अगर कोई नज़र डालने पर कोई फर्क नहीं पड़ता है, तो इसकी बहुत सराहना की जाएगी!

function split(val) { 
      return val.split(/,\s*/); 
     } 

     function extractLast(term) { 
      return split(term).pop(); 
     } 

     jQuery('#tagSearch') 
      .bind('keydown', function(event) { 
        if (event.keyCode === jQuery.ui.keyCode.TAB && 
         jQuery(this).data('autocomplete').menu.active) { 
          event.preventDefault(); 
        } 
      }) 
      .autocomplete({ 
       autoFocus: true, 
       source: function(request, add) { 
        console.log('source'); 
        jQuery.getJSON('/get-tags-like.php?term_start=' + request.term, function(response) { 
         var possibleTerms = []; 

         jQuery.each(response, function(i, val) { 
          possibleTerms.push(val.name + ' ' + '(' + val.count + ')'); 
         }); 

         add(jQuery.map(possibleTerms, function(item) { 
          console.log(possibleTerms); 
          return item; 
         }));   
        }); 
       }, 
       focus: function() { 
        console.log('focus'); 
       return false; 
       }, 
       select: function(event, ui) { 
        console.log('select'); 
        var terms = split(this.value); 

        terms.pop(); 

        terms.push(ui.item.value); 

        terms.push(''); 

        this.value = terms.join(','); 

        // At this point, example: 
        // Sony (5) 
       var currentVal = this.value; 

        // Sony (5) - Gets inserted as "Sony" 
        currentVal = currentVal.replace(/\s\(.\)/, ''); 

        this.value = currentVal; 

        return false; 
       }, 
       minLength: 2 
      }); 
+0

क्या कुंजीपटल घटना का स्वत: पूर्ण बाध्यकारी आपके साथ हस्तक्षेप करेगा? –

उत्तर

1

हालांकि, बाद में इसे फिर से एक दूसरा मान के लिए संकेत नहीं है।

सुनिश्चित करें कि आप 2 से अधिक वर्ण टाइप कर रहे हैं।

search: function() { 
     var term = extractLast(this.value); 

     if (term.length < 2) { 
      return false; 
     } 
}, 

इसके अलावा, जब मैं एक आंशिक दर्ज करें और कहते हैं कि 10 प्रविष्टियों पॉप अप, टैब बस को जाता है: समारोह search के लिए पारित एक खोज के कारण से कम से कम दो पात्रों के साथ एक खोज रोक रहा है अगला फॉर्म फ़ील्ड, सुनिश्चित नहीं है कि मेरे .bind, शायद एक सेटिंग में क्या गलत है?

bind शुरुआत में क्षेत्र जब एक स्वत: पूर्ण उम्मीदवार हाइलाइट किया गया है से टैब से उपयोगकर्ता को रोकने के लिए प्रयास कर रहा है। एक एकल मान स्वत: पूर्ण के साथ, यह आमतौर पर कोई समस्या नहीं है क्योंकि पहले मेनू आइटम चुना जाता है, input में रखा गया है, और फिर फोकस खो गया है।

यह बदलता है जब आप input में एकाधिक मान चाहते हैं। हम keydown की उस डिफ़ॉल्ट कार्रवाई को रोकना चाहते हैं जो अगले इनपुट फ़ील्ड पर फ़ोकस करता है।

autocomplete में autoFocus विकल्प है जो यहां उपयोगी होगा। यह सुनिश्चित करेगा कि उपयोगकर्ता हमेशा चयनित होता है जब उपयोगकर्ता टाइपिंग के बाद टैब हिट करता है।

मैं आपकी स्थिति को बिल्कुल दोहराने में सक्षम नहीं हूं, लेकिन मैंने एक डेमो बनाया है जो आपके द्वारा अनुभव की जा रही समस्याओं में से कोई भी प्रदर्शित नहीं करता है (मैंने वास्तव में किया है सब कुछ स्रोत बदल गया है और autoFocus जोड़ें विकल्प): http://jsfiddle.net/zTVKC/

+0

धन्यवाद! यह अभी भी काम नहीं कर रहा है, हालांकि आपके जेएसफिड ने मुझे बहुत सारी अंतर्दृष्टि दी है, मैं एजेक्स को GetJSON का उपयोग किये बिना बिल्कुल काम नहीं कर सका। अब मैंने पहली प्रविष्टि के बाद देखा है, यह दूसरे के लिए AJAX कॉल करता है और ऑब्जेक्ट प्राप्त करता है, लेकिन ड्रॉपडाउन को जोड़ या पॉप्युलेट नहीं करता है: - /। मैंने उस संभावना से छुटकारा पाने के लिए पूरी तरह से खोज फ़ंक्शन को हटा दिया। –

+1

@ जॉन: दिलचस्प ... क्या आप इसे खोज रहे हैं? यदि आप एक ही चीज़ को दो बार खोजते हैं (जो एक ही परिणाम लौटाएगा), क्या इससे कोई फर्क पड़ता है? –

+0

नहीं, हमेशा एक ही चीज़, परिणाम प्राप्त करती है और 1 परिणाम के बाद उन्हें प्रदर्शित नहीं करती है। मैं सबकुछ हटा सकता हूं, और स्क्रैच से फिर से शुरू कर सकता हूं, यह पहले के लिए काम करता है और दूसरा नहीं। मुझे लगता है कि मुझे लगता है कि अल्पविराम delimiter के साथ कुछ गड़बड़ होनी चाहिए। – user652650

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