javascript - शैल कमांड लाइन समापन के समान टैब पूर्णता/ऑटोफिल के साथ अजाक्स स्वत: पूर्ण(या स्वत: सुझाव)?




ajax autocomplete (2)

यदि आपका jQuery का उपयोग करना है, तो एक महान प्लगइन http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete/ है । बस ड्रॉपडाउन बॉक्स को छिपाने के लिए सीएसएस का उपयोग करें, और टैब-ऑटो-पूर्ण कार्यक्षमता को छोड़ दें

मुझे लगता है कि यह अपने लिए एक jquery प्लगइन बनाने के लिए आसान होगा ...

टैब कुंजी के लिए सुनो की पंक्तियों के साथ टैब की दबाए जाने पर टैब ट्रिगर करें: इनपुट पर क्लिक करें। ऑटोोटैब

   $(document).keydown(function(e){ if (e.keyCode = (tab-key?)){
       $('input.autotab').trigger('tab:press');
   });      

बाँध इनपुट। ऑटोोटैब का टैब: एक जावास्क्रिप्ट सरणी लुकअप, या एक एक्सहोर अनुरोध (एजेक्स) पर फ़ोकस करें (प्रत्येक लूप में ... अगर फ़ोकस == सही आदि)। फिर वापस डेटा के रूप में इनपुट का मान सेट करें।

  $('input.autotab').bind('tab:press', function(){
      if (this.hasFocus){
         this.disabled = true;
         $.get('/autotab', { q: $(this).val() }, function(response){
               $(this).val(response);
               this.disabled = false;
         }, function(){ this.disabled = false; });
      }
  });

अपने स्वत: पुनर्जीवित स्क्रिप्ट में, इसे एक बार डाटाबेस में एक बार से अधिक मूल्य के साथ मेल करें (सूचकांक में लूप का उपयोग करें, इंडेक्स तत्व पर रोकता है जहां पहला तत्व मिलान होता है), और उस बिंदु तक मूल्य लौटाएं।

मैं एक AJAX स्वत: पूर्ण / स्वत: सुझाव सुविधा को लागू कर रहा हूं, और न केवल मैं सामान्य शो सुझावों को करना चाहता हूं जो उपयोगकर्ता द्वारा टाइप किए गए समान हैं, लेकिन मैं उपयोगकर्ता को टाइपिंग को बचाने के लिए आंशिक रूप से पूरा करने देना चाहता हूं।

सो, कल्पना करो कि मेरे डिक्शनरी में ये मान हैं: "हरे सेब", "हरी पेअर", "हरी फल", "नीला आकाश", "नीला पानी", "नीला जगा"।

अगर उपयोगकर्ता "जी" में टाइप करता है, तो सुझाव "हरे सेब", "हरी पेअर", "हरी फल" होना चाहिए, और मैं उपयोगकर्ता को "हरी" के लिए अपनी क्वेरी अपडेट करने के लिए टैब या कुछ को दबा देना चाहता हूं। तो वे "a" टाइप कर सकते हैं और वे "हरी सेब" तक पूरा कर लेंगे

मैं इसे linux shell कमांड लाइन पूर्ण होने के बाद मॉडल करने की कोशिश कर रहा हूं।

क्या आप इस पर नियंत्रण / स्क्रिप्ट सुझा सकते हैं? या मौजूदा नियंत्रण के एक संशोधन / अनुकूलन?


यह विशिष्ट प्रकार की स्वत: पूर्ण समाप्ति लोकप्रिय ऑटोस्प्लीमेंट प्लगइन्स (jQuery, Scripty ... के लिए) में समर्थित नहीं है क्योंकि आमतौर पर वे वांछित मिलान को चुनने के लिए ड्रॉप-डाउन UI प्रदान करते हैं

तो मान लें कि हमें आउट-द-बॉक्स समाधान नहीं मिला है। बू-हो। यह कोड करने के लिए कितना मुश्किल हो सकता है?

// takes a text field and an array of strings for autocompletion
function autocomplete(input, data) {
  if (input.value.length == input.selectionStart && input.value.length == input.selectionEnd) {
    var candidates = []
    // filter data to find only strings that start with existing value
    for (var i=0; i < data.length; i++) {
      if (data[i].indexOf(input.value) == 0 && data[i].length > input.value.length)
        candidates.push(data[i])
    }

    if (candidates.length > 0) {
      // some candidates for autocompletion are found
      if (candidates.length == 1) input.value = candidates[0]
      else input.value = longestInCommon(candidates, input.value.length)
      return true
    }
  }
  return false
}

// finds the longest common substring in the given data set.
// takes an array of strings and a starting index
function longestInCommon(candidates, index) {
  var i, ch, memo
  do {
    memo = null
    for (i=0; i < candidates.length; i++) {
      ch = candidates[i].charAt(index)
      if (!ch) break
      if (!memo) memo = ch
      else if (ch != memo) break
    }
  } while (i == candidates.length && ++index)

  return candidates[0].slice(0, index)
}

यहां टेस्ट पेज - यह सामान्य ब्राउज़र में काम करना चाहिए IE का समर्थन करने के लिए prototype.js, jQuery या अन्य से ईवेंट का उपयोग करना।