2011-01-10 15 views
2

私はこの1つを使用しています:jQueryの - オートコンプリートのプラグイン

https://github.com/agarzola/jQueryAutocompletePlugin

唯一の問題は、あなたが入力フィールドに1文字目を入力すると、それがどのドン用語を含む、すべての用語の提案を表示するということですこの文字は含まれていません。

2文字目を入力した後でのみ、2文字だけを含むタグ候補を表示して正常に動作します。

私は、この設定を使用しています:

$('input.autocomplete').autocomplete("localhost/boo/?get_suggestions=1", { 
    width: 250, 
    max: 100, 
    matchContains: true, 
    minChars: 1, 
    selectFirst: true, 
    cache: false, 
    multiple: true, 
    multipleSeparator: " " 
}); 

誰もがこれを回避する方法を知っていますか?また

alt text

私はそれは例えばのために、リストにないことを知っているランダムな文字列を入力します。 *&@FGBHFHBOFUBF*UB#再度全体のリストが表示されます:(

バックエンド:

if($_GET['get_suggestions']): 
    $terms = get_all_terms(); 
    foreach ($terms as $term) echo $term['title']."\n"; 
    die(); 
endif; 
+0

「get_all_terms()」を投稿してください。なぜあなたはコードを投稿するために躊躇していますか?また、何かを入力するときは、開発ツール(chromeの要素を調べる、firefoxのextをfirefoxにインストールする)を開き、xmlhttpリクエスト(chromeでコンソールアイコンをクリックして右クリックし、log xmlhttp要求を選択)を見てください。 「a」と入力したときに「a」を入力しているかどうかを確認してください。以下に述べるように、 "ac"の "a"と "a"の何も入力しないでください。 – Jason

+0

source:function(request、response){var filteredArray = $ .map(orignalArray、function(item){if(item。 value.startsWith(request.term)){戻り値;} else {return null;}}));レスポンス(filteredArray); }、http://stackoverflow.com/questions/3148195/jquery-ui-autocomplete-use-startswith –

答えて

1

私はgithub repoを維持しています。ここでは何が起こっているのですか:

データにURLを使用する場合、スクリプトは指定したURLに設定したものを要求として送信し、最後にq=[current input value]を追加します。初期ロードの場合、 "a"と入力すると、バックエンドスクリプトlocalhost/boo/?get_suggestions=1&q=aに送信されます。したがって、autocomptete.jsは、この最初のクエリがクエリに一致する項目のみを生成することを期待しています。その最初のリクエストの後、スクリプトはサーバの負荷を減らすためにフィルタリングサブセットを内部的に使用します。これは、 "ac"があなたの条件に合ったアイテムだけを返す理由を説明します。これは、サーバーがそれを与えたものをフィルタリングする仕事をしているオートコンプリートスクリプトです。

私がバックエンドコードを正しく解釈している場合、要求内でqパラメータが送信されていないので、コードはすべての可能な用語を返しています。オートコンプリートは、これが適切な検索の結果であると推測し、すべての文字を表示し、リストをさらにフィルタリングするために入力する文字を待っています。

自動完成スクリプトに返す前に、qパラメータに一致するもののリストをバックエンドスクリプトでフィルタリングする必要があります。

さらなる支援が可能かどうか教えてください。

+0

ありがとう、私は今理解しています:Pしかし、これはスクリプトのクエリを少しサーバーをあまりにも多くしないでください? – Alex

+1

最小文字数(この場合は1文字)が入力されるたびに、サーバーに照会するだけです。しかし、最初のクエリが作成されると、その用語の残りの文字はJSレベルでフィルタリングされることに注意してください。実際に、あなたが今設定している方法は、最初の読み込み時に(「a」と入力すると)1つのクエリが行われ、残りの部分はローカルで実行されます(JS /ブラウザの場合は「c」と入力します)。 。 – Alfonso

+0

ありがとう:)他のデータを含むように提案ボックスのレイアウトを変更することが可能かどうかを尋ねるかもしれません。例2,3などがあります。http://tomcoote.co.uk/wp-content/CodeBank/Demos /JSONSuggestBox/demo.html – Alex

1

私は完全に最初の文字の提案を無効に示唆、第二あるいは第三文字で開始するとほとんどの人は自分自身を見つける含みます。それは即座に "b" を入力した後、提案をスパム取得します。

+0

これを行うと、同じことが起こります( 'minChars'文字の後)。だから私が3に変更した場合、少なくとも4文字を入力すると正常に動作します...しかし、提案のおかげで、私はそれを働かせることができます:) – Alex

+0

ああ、 about minChars ghe ghe ghe :)ハッキーになり、個人的なminCharsに達するまで、提案を隠すかもしれません。しかし、まず問題を見つけようとするべきです。 **編集**私が指摘したいくつかの事柄は、localhost/boo /の問題ではありません。 AutoCompleteプラグインのgithubページを読むと、 "JörnZaefferer(現在廃止予定)のjQueryプラグイン"と表示されます。興味深いかもしれない。 – orlp

+0

はい、githubのプラグインは廃止予定のプラグインのポートです(bassistance.deのプラグインはjqueryのUIに統合されています)。 – Alex

1
迷惑な2

minChars: 2 

にごmincharsを変更

それはそれが2文字からのものを示唆するようにします。

または複数の電源をオフにしてください。

multiple: false 

有効にする必要がありますか?

それはお茶のあなたのカップではありません場合は、localhost /ブーイングのコードを投稿/?get_suggestions = 1、我々はオートコンプリートのコードは、いくつかの部分で間違っていること:)

+0

上記のように、バグは残っていますが、今度は2文字目です:) 'localhost/boo /?get_suggestions = 1'のコードはOKです。各行の用語リストをエコーし​​ます。 – Alex

+0

Post私たちのためのコードは、それを修正できる唯一の方法です。 – Jason

+0

大丈夫です。私はやった.... – Alex

1

を参照してください見てみましょう。投稿した画像から、aと入力すると、すべての用語の長いリストが表示されました。 acと入力したとき、acの代わりにaと一致する候補のリストが表示されました。

この意味は?新しい文字が考慮される前に、コードは入力値を取ります。プラグインコードに潜んでもらうか、新しいプラグインを使うことができます。

関連する問題