2016-12-21 12 views
6

मैं typeahead.js के साथ काम कर रहा हूं और BloodHound remote विकल्प का उपयोग कर डेटा लोड कर रहा हूं।खाली रिक्त स्थान पर AJAX कॉल को रोकें typeahead.js

सब कुछ उम्मीद के रूप में काम कर रहा है सिवाय इसके कि जब मैं only spacestextbox टाइपहेड में अभी भी sends ajax call दर्ज करता हूं।

मैं जानना चाहता हूं कि prevent ajax call का कोई तरीका है यदि टेक्स्टबॉक्स में only spaces हैं। मैं trim जैसे समान व्यवहार की तलाश में हूं।

मेरा कोड यहां है। मैंने prepare फ़ंक्शन का उपयोग करने की कोशिश की है लेकिन बिना किसी किस्मत के।

var dataSource = new Bloodhound({ 
    datumTokenizer: Bloodhound.tokenizers.obj.whitespace('ProductID', 'ProductName'), 
    queryTokenizer: Bloodhound.tokenizers.whitespace, 
    remote: { 
       url: urlVar + "LoadAllProductByProductName/%QUERY", 
       wildcard: '%QUERY', 

      }, 
    sufficient: 3, 
    }); 

const $tagsInput = $('.txtProductName') 
$tagsInput.typeahead({ 
    minLength: 3, 
    source: dataSource, 
    hint: false, 
    highlight: true, 
    isBlankString: false 
    }, 
    { 
     limit: 10, 
     source: dataSource, 
     name: 'dataSource', 
     display: function (item) { 
     return item.ProductName 
     }, 
     suggestion: function (data) { 
     return '<div>' + data.ProductName + '–' + data.ProductID + '</div>' 
     }, 

}); 
+0

रिक्त स्थान होने पर कॉल भेजने में समस्या क्यों है? संभवतः उपयोगकर्ता को कोई परिणाम नहीं मिलेगा। – ADyson

+0

मैं नेटवर्क यात्रा से बचना चाहता हूं। – Mairaj

+3

दें कि प्रत्येक बार जब उपयोगकर्ता 3 से अधिक अक्षरों को टाइप करता है, और उपयोगकर्ता की संभावनाएं वास्तव में 3 खाली रिक्त स्थान टाइप करती हैं (उन्हें लगता है कि यह कुछ भी वापस नहीं आएगा!), तो आप एक नेटवर्क यात्रा उत्पन्न करते हैं। बहुत प्रयास कर सकते हैं और 0.0001% तक अपने नेटवर्क यातायात को कम कर सकते हैं। बस यह कह रहा है कि यह थोड़ा व्यर्थ लगता है। लेकिन यदि आप वास्तव में चाहते हैं, तो आप 'स्रोत' विशेषता के लिए एक कस्टम फ़ंक्शन बना सकते हैं और अनुरोध को उस बिंदु पर आगे बढ़ने से रोक सकते हैं (और केवल एक खाली सरणी लौटाएं)। टाइपहेड डॉक्स विधि हस्ताक्षर दिखाते हैं – ADyson

उत्तर

1

remote संपत्ति एक prepare समारोह जो आप संभाल कॉल तार पर जा रहा से पहले इस परिवर्तन का उपयोग कर सकते है।

एक उदाहरण के रूप:

function createBloodHoundConfig(options) { 
    return { 
     datumTokenizer: Bloodhound.tokenizers.obj.whitespace('Name'), 
     queryTokenizer: Bloodhound.tokenizers.whitespace, 
     identify: options.identify, 
     sufficient: 8, 
     remote: { 
      url: options.url, 
      prepare: function (query, settings) { 
       settings.url = settings.url.replace("{q}", query.trim()); 
       return settings; 
      } 
     }, 
    }; 
} 

ध्यान दें कि इस मामले में आप wildcard संपत्ति की आपूर्ति नहीं करते, क्योंकि यह प्रभावी रूप से टोकन प्रतिस्थापन करने के लिए एक आशुलिपि है।

+0

यह कॉल को रोकता नहीं है। यह बस 'ट्रिम' की खोज की जाती है। – ndn

4

मैं टेक्स्ट बॉक्स KeyUp घटना संलग्न निस्पंदन प्रदर्शन करने की कोशिश करेंगे:

$tagsInput.keyup(function(){ 
     this.value = this.value.replace(/ */, ' '); 
    }); 

कि दूसरी जगह के बाद सक्रिय होगा, जो अवांछित व्यवहार को कम करना चाहिए जब तक कि वहाँ में गैर अंतरिक्ष चरित्र क्षेत्र, साथ ही साथ।

+0

मुझे लगता है कि यह संभव तरीका है – plonknimbuzz

+0

भले ही यह काम करता है, यह वह समाधान नहीं है जिसे मैं ढूंढ रहा हूं। यदि आप सुनिश्चित हैं कि ऐसा करने के लिए कोई बेवकूफ तरीका नहीं है, तो मैं इसे एक उत्तर के रूप में पसंद करता हूं। – ndn

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