Javascript 标记和条件自动完成

Javascript 标记和条件自动完成,javascript,jquery,autocomplete,tags,Javascript,Jquery,Autocomplete,Tags,我正在使用标签和自动完成。现在,我可以自动完成一个学期: 控制台: GET .../source.php?term=value01 Javascript: $("#input-newsearch-2").tagit({ singleField: true, singleFieldDelimiter: ",", allowSpaces: true, autocomplete: ({ source: function( request, response ) { //var tagt

我正在使用标签和自动完成。现在,我可以自动完成一个学期:

控制台:

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){

    }

})

});
。。。按enter键时,该值会被标记(alert($('#input-newsearch-2').val()=value01),我可以搜索下一个术语

但当进入下一个术语时,autocomplete会再次搜索整个数据库。我想根据以前的标签(和位置)过滤数据库?这怎么可能

这是我的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>

您的意思是,要将新输入的值连接到以前输入的值吗

可以将新条目连接到全局声明的变量

// before/outside of tagit()...
var terms="";
如果全局变量的长度大于0,则添加逗号,然后添加新条目,否则不添加逗号

// concatenate when you wish:
if(terms.length>0){
    terms+=',';
}
$terms+=$('#input-newsearch-2').val();
然后只需将全局变量添加到ajax的数据对象中,就可以传递csv字符串

  data: {
    term: terms
  },
或者,您可以将新条目连接到
元素,并让ajax收集该值

我想在这两种情况下,您都希望能够从内存中清除以前的条目


下面是php查询构建部分

根据您最近提出的另一个/相关问题,我假设您正在对db列进行筛选:
name
&
code

此外,用户输入的任何包含逗号的值都会影响查询。始终,始终清理用户输入

这段代码使用一个循环来演示三个不同的输入如何生成不同的查询。在实际情况中不需要循环,因为您的输入是单个字符串

代码:()

输出:

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%')

@如果这个答案令人满意,请将其标记为已接受,否则请给我留下评论,解释什么不太正确,我将再次尝试。让我们继续解决这个问题。
$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%')