我正在使用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>
答案 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%')