可能是最糟糕的问题,但我不知道怎么说出来。
基本上我已将jQuery tag-it实现到我的代码中。但是,我正在使用来自其他用户的解决方案,只要它能够提取我想要的数据并将其转储到我需要的输入中,就能正常工作。
我得到的解决方案是:
jQuery的:
$(document).ready(function(){
var availableTags = <?php include("ajax-search.php"); $english = search();?>;
$("#livesearch").tagit({
autocomplete: {
source: availableTags
}
});
});
PHP /库MySQLi:
function search() {
include("dbconnect.php"); //Including our DB Connection file
$sql = "SELECT * FROM animals";
$query = mysqli_query($db, $sql);
while ($result = mysqli_fetch_assoc($query)){
$english[] = $result['eng_names'];
}
echo json_encode($english);
}
基本上我想要返回3个变量。英语,拉丁语和地位。
所以,前提是:
Status = English == Latin
因此,在状态中,我有灭绝,濒危,野外灭绝等等。但是有些动物不属于这些列表中的任何一个。这些动物可能很常见,因此不需要特殊标签,但它们都需要具有拉丁名称。
目的是如果用户输入'Extinct',将显示所有死亡动物的列表。
为什么要使用标签?好吧,因为他们是报道。用户将编写报告并标记其中涉及的任何动物。需要返回动物的名称(拉丁语和英语),但不是状态。
我想我理解json如何做到这一点。只需添加它们。如果该字段在状态列中没有文本,则忽略它。但是,我不知道如何从mysqli搜索返回它。我认为该方法是.map(),但每当我使用.map()时,搜索功能都会中断(如同列出所有生物一样,但是如果你输入它就不会漏掉搜索。
修改
喜悦。所以,我设法弄清楚如何匹配我困惑的两个参数。
我是通过修改原始jQuery来实现的:
<script>
$(document).ready(function(){
$("#livesearch").tagit({
autocomplete: {
source: 'ajax-search.php',
minLength:1
}
});
});
</script>
然后在HTML中我添加了一个post方法:
<form method="post">
<input name="tags" id="latin" size="100%" disabled="true">
<ul id="livesearch"></ul>
<input type="submit" value="Submit" />
</form>
但搜索都发生在PHP / MySQLi查询中:
if ( !isset($_REQUEST['term']) )
exit;
$keyword = trim($_REQUEST['term']);
$keyword = mysqli_real_escape_string($db, $keyword);
$query = "SELECT * FROM animals WHERE english LIKE '%$keyword%' OR status LIKE '%$keyword%'";
$result = mysqli_query($db, $query); //Run the Query
$data = array();
if ($result && mysqli_num_rows($result)){
while($row = mysqli_fetch_assoc($result)){
$data[] = array(
'label' => $row['english'],
'value' => $row['english'],
'latin' => $row['latin']
);
}
}
echo json_encode($data);
flush();
所以,如果我搜索状态(灭绝,濒临灭绝等),它会返回正确的动物。
我从these guys得到了这个想法/代码。
所以我现在停留在需要在两个不同的领域展示拉丁语和英语的部分,但我认为这需要做一些摆弄tag-it.js源代码。如果我弄明白,我会更新。
编辑2:
好的,我设法将两个不同的结果放入两个不同的文本字段中。但它并没有将输入关闭到标签中。
这是修改过的jQuery:
$("#livesearch").tagit({
autocomplete: {
source: "ajax-search.php",
select: function(evt, ui){
this.form.latin.value = ui.item.latin;
}
}
});
它的作用是将拉丁文放在拉丁文本输入中。但它现在并没有像以前那样将输入包装成一个整洁的小标签。
编辑3
我尽可能地走了,但没有用。
基本上我已经通过扩展自动完成字段在tag-it.js中添加了变量调用:
// Autocomplete.
if (this.options.availableTags || this.options.tagSource || this.options.autocomplete.source) {
var autocompleteOptions = {
select: function(event, ui) {
that.createTag(ui.item.value);
that.createTag(ui.item.latin); //custon input?
// Preventing the tag input to be updated with the chosen value.
return false;
}
};
$.extend(autocompleteOptions, this.options.autocomplete);
然而,所有这一切都是同时添加动物的常规英文名称和动物的拉丁名字。然后我可以删除英文名称,但这太长了。
我尝试使用似乎有用的this.form.latin.value = ui.item.latin;
,但是如果我添加了一些标签,或者如果我删除一个标签,整个代码就会中断。这似乎是单向的,所以这不是一个好的解决方案。
答案 0 :(得分:0)
决定使其他输入可编辑。这不是一个最佳解决方案,但它必须暂时做到。我将更新此内容并将其转换为Wiki,以供其他需要类似Tag-It代码功能的人使用。