2017-03-27 19 views
0

私は、テージングとオートコンプリートにhttp://aehlke.github.io/tag-it/を使用しています。テジャングと条件付きオートコンプリート

コンソール:

GET .../source.php?term=value01 

Javascriptを:

$("#input-newsearch-2").tagit({ 
singleField: true, 
singleFieldDelimiter: ",", 
allowSpaces: true, 
autocomplete: ({ 
    source: function(request, response) { 
    //var tagterm = $('#input-newsearch-2').val(); 
    $.ajax({ 
     url: "source.php", 
     dataType: "json", 
     data: { 
     //term: tagterm 
     //term: $('#input-newsearch-2').val() 
     term: request.term 
     }, 
     //data: JSON.stringify({ term: $('#input-newsearch-2').val() }), 
     success: function(data) { 
     response(data); 
     } 
    }); 
    console.log(request.term); 
    },       
    minLength: 3, 
    select: function(event,ui){ 

    } 

}) 

}); 

...値を入力するキー押すときタグ付けされます(警告($今のように、私は、単一の用語のために自動補完することができます( '#input-newsearch-2').val()= value01))次の語を検索することができます。

しかし、次の用語を入力するときに、オートコンプリートは毎回データベース全体を再度検索します。以前のタグを考慮してデータベースをフィルタリングしたいのですが?これはどのように可能ですか?

これは私のhtmlです:

<input id="input-newsearch-2" autocomplete="off" type="text"> 
// created by tagit                              
<ul class="tagit ui-widget ui-widget-content ui-corner-all"> 
<li class="tagit-choice ui-widget-content ui-state-default ui-corner-all tagit-choice-editable"> 
<li class="tagit-new"> 
    <input class="ui-widget-content ui-autocomplete-input" autocomplete="off" type="text"> 
</li> 
</ul> 

...私は複数の値#入力-newsearch-2をタグ付けしましたときには、次のようになります。

$('#input-newsearch-2').val() = value01,value02,value03 

答えて

0

あなたが意味するか、あなたが連結したいです入力された新しい値を前回入力した値に戻しますか?

グローバルに宣言された変数に新しいエントリを連結できます。

// before/outside of tagit()... 
var terms=""; 

グローバル変数の長さが0より大きい場合は、コンマを追加してから新しいエントリを追加します。そうでない場合は、コンマを追加しないでください。

次に、グローバル変数をajaxのデータオブジェクトに追加して、csv文字列を配信する必要があります。

data: { 
    term: terms 
    }, 

また、あなたは<input name="termstorage" type="hidden" value="">要素に新しいエントリを連結でき、ちょうどあなたのAJAXのは、その値を収集しています。

どちらの場合でも、メモリから以前のエントリを消去する機能を提供したいと考えています。また、name & code

:ここ


は、PHPのクエリビルド部分が...

である私は、あなたがDBの列に対してフィルタリングしているあなたの最近の他の/関連する質問から仮定を作っていますユーザーがコンマを含む値を入力すると、そのクエリに影響します。常に、ユーザーの入力を常に衛生的にします。

このコードでは、ループを使用して、3つの異なる入力がどのように異なるクエリを生成するかを示しています。入力は単一の文字列なので、実際のケースではループは必要ありません。

コード:(Demo

$mock_GET_term[]=""; 
$mock_GET_term[]="value01"; 
$mock_GET_term[]="value01,value02,value03"; 

foreach($mock_GET_term as $csv){ 
    $query="SELECT * FROM `accounts`"; 
    if(strlen($csv)>0){ 
     $where_cond=str_replace(',',"%' OR `name` LIKE '%",$csv); 
     $query.=" WHERE (`name` LIKE '%{$where_cond}%'"; 
     $query.=" OR `code` LIKE '%{$where_cond}%')"; 
    } 
    echo "Query = $query\n\n"; 
} 

出力:受け入れとして

Query = SELECT * FROM `accounts` 

Query = SELECT * FROM `accounts` WHERE (`name` LIKE '%value01%' OR `code` LIKE '%value01%') 

Query = SELECT * FROM `accounts` WHERE (`name` LIKE '%value01%' OR `name` LIKE '%value02%' OR `name` LIKE '%value03%' OR `code` LIKE '%value01%' OR `name` LIKE '%value02%' OR `name` LIKE '%value03%') 
+0

@PhilippMこの答えは満たしていれば、そうでない場合は非常に適切ではない何かを説明するために私のコメントを残し、それをマークしてください私はそれに別の亀裂があります。この問題を解決のために動かし続けましょう。 – mickmackusa