2016-12-21 3 views
6

私はtypeahead.jsで作業していましたが、データはBloodHound remoteオプションを使用してロードしています。空きスペースでのajaxコールの防止typeahead.js

only spacestextboxに入力しても、それでもなおsends ajax callと入力した場合を除き、すべてが正常に動作しています。

テキストボックスにonly spacesがある場合、prevent ajax callへの道があるかどうかを知りたいです。私は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%削減する可能性があります。それはちょっと意味がないようだ。しかし、本当にしたいのであれば、 'source'属性のカスタム関数を作成して、検索条件に基づいて要求がその時点で先に進まないようにすることができます(空の配列を返します)。先読み文書にはメソッドシグニチャが表示されます – ADyson

答えて

1

remoteプロパティは、あなたが前にワイヤ上を行くの呼び出しへのハンドルにこの変更を使用することができますprepare機能を持っています。一例として、

:それは効果的にトークンの交換を行うための省略形であるとして、この場合には、あなたが、wildcardプロパティを指定しないことを

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

注意。

+0

これは呼び出しを妨げません。それは単に検索対象を整えるだけです。 – ndn

4

Iろ過実行するために、テキストボックスにkeyUpイベントを装着しようとするだろう:

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

第二空間の後に起動します、非空白文字がでない限り望ましくない行動を軽減する必要がありますフィールドも同様です。

+0

これは可能な方法だと思います – plonknimbuzz

+0

それが動作しても、私が探している解決策ではありません。あなたがそれを行うための慣用的な方法がないと確信しているなら、私は答えとしてそれを好む。 – ndn

関連する問題