分页和条件自动完成

时间:2017-03-27 20:56:41

标签: javascript jquery autocomplete tags

我正在使用http://aehlke.github.io/tag-it/进行分页和自动填充。截至目前,我可以自动完成单个术语:

控制台:

debug = 0

使用Javascript:

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

...按键时输入值被标记(alert($('#input-newsearch-2')。val()= value01))我可以搜索下一个词。

但是当进入下一个学期时,自动完成功能每次都会搜索整个数据库。考虑到之前的标签(AND WHERE),我想过滤数据库?这怎么可能?

这是我的HTML:

$("#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看起来像:

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

1 个答案:

答案 0 :(得分:0)

您的意思是,您想将新输入的值与先前输入的值相连接吗?

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

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

或者,您可以将新条目连接到<input name="termstorage" type="hidden" value="">元素,并让您的ajax收集该值。

我想在任何一种情况下,你都希望能够从内存中清除以前的条目。

这是php查询构建部分......

我正在根据您的其他近期/相关问题假设您正在过滤数据库列:name&amp; code

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

此代码仅使用循环来演示三个不同的输入将如何生成不同的查询。由于输入是单个字符串,因此在实际情况下不需要循环。

代码:(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%')