2016-12-21 21 views
6

BloodHound remote seçeneğini kullanarak typeahead.js ile çalışıyor ve verileri yüklüyorum.Boş alanlarda ajax çağrısını engelleyin typeahead.js

textbox yazım denetiminde hala sends ajax call yazarken her şey beklendiği gibi çalışıyor.

Metin kutusunda only spaces varsa, prevent ajax call yolunun olup olmadığını bilmek istiyorum. trim gibi benzer davranışları arıyorum.

İşte kodum. prepare işlevini kullanmayı denedim, ancak şanssız.

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

Neden boşluk olduğunda çağrı göndermek bir sorun? Muhtemelen kullanıcı hiçbir sonuç almayacaktır. – ADyson

+0

Ağ yolculuğundan kaçınmak istiyorum. – Mairaj

+3

, kullanıcının 3'ten fazla karakter içeren _anything_ türlerini yazdığı her seferinde bir ağ gezisinin üretildiğini ve bir kullanıcının gerçekten 3 boş alan yazması olasılığını (bir şeyin herhangi bir şey döndüreceğini düşünmezler) verdiğini belirtir. Çok fazla çaba harcayabilir ve ağ trafiğinizi% 0.0001 azaltabilir. Sadece biraz anlamsız görünüyor. Ancak, gerçekten istiyorsanız, 'source' özniteliği için özel bir işlev oluşturabilir ve isteğin arama terimlerine göre bu noktada ilerlemesini engelleyebilir (ve boş bir diziyi döndürebilirsiniz). Typeahead dokümanlar, yöntem imzasını gösterir – ADyson

cevap

1

remote özelliği önceki tel üzerinden gidiyor çağrısına Kolu bu değişikliği kullanabileceğiniz bir prepare işlevi vardır. Örnek olarak

: etkin belirteç değiştirme yapmak için bir kısaltmadır olarak bu durumda, wildcard özelliğini kaynağı değil ki

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; 
      } 
     }, 
    }; 
} 

Not.

+0

Bu, çağrıyı engellemez. Sadece basitçe 'aranan şeyleri kırpıyor. – ndn

4

Ben filtrasyon gerçekleştirmek için metin kutusuna bir keyUp olayı takılarak denemek:

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

ikinci boşluktan sonra tetiklenecek, boşluksuz karakterler içinde olmadığı sürece istenmeyen davranışı azaltmak gerekir alanı da.

+0

Bu olası yolu olduğunu düşünüyorum – plonknimbuzz

+0

Çalışırsa bile, aradığım çözüm değil. Bunu yapmak için herhangi bir deyim olduğundan emin değilseniz, bunu bir cevap olarak tercih ederim. – ndn

İlgili konular