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