Jquery将多个PHP数组作为不同的类别自动完成
我可以成功地使用php数组作为自动完成的结果,并能够单独单击它们。然而,我现在还想使用第二个PHP数组,并将其作为一个单独的类别。第一类是用户名,第二类是团队。下面是我的代码:Jquery将多个PHP数组作为不同的类别自动完成,php,jquery,arrays,autocomplete,Php,Jquery,Arrays,Autocomplete,我可以成功地使用php数组作为自动完成的结果,并能够单独单击它们。然而,我现在还想使用第二个PHP数组,并将其作为一个单独的类别。第一类是用户名,第二类是团队。下面是我的代码: // query to find usernames for the search bar $userSearch = $pdo->prepare("SELECT username FROM members"); $userSearch->execute([]); ($userSearc
// query to find usernames for the search bar
$userSearch = $pdo->prepare("SELECT username FROM members");
$userSearch->execute([]);
($userSearchResult = $userSearch->fetchAll(PDO::FETCH_COLUMN));
// query to find teams for the search bar
$teamSearch = $pdo->prepare("SELECT teamName FROM teams");
$teamSearch->execute([]);
($teamSearchResult = $teamSearch->fetchAll(PDO::FETCH_COLUMN));
?>
<script type="text/javascript">
//Assign php generated json to JavaScript variable
var userSearch = <?php echo json_encode($userSearchResult); ?>;
var teamSearch = <?php echo json_encode($teamSearchResult); ?>;
$.widget("custom.catcomplete", $.ui.autocomplete, {
_renderMenu: function(ul, items) {
var self = this,
currentCategory = "";
$.each(items, function(index, item) {
if (item.category != currentCategory) {
ul.append("<li class='ui-autocomplete-category'>" + item.category + "</li>");
currentCategory = item.category;
}
self._renderItem(ul, item);
});
}
});
$(function() {
$("#searchBox").catcomplete({
source: [{"label":userSearch, "category":"username"}, {"label":teamSearch, "category":"teams"}]
});
});
</script>
我得到:
usernames
username 1,username 2,username 3
teams
team 1,team 2,team 3
我希望我在变量中使用的内爆能解决这个问题,但从来没有
如果我只使用一个变量作为源,而不使用这样的类别:
source: userSearch
我确实成功地获得了用户名列表,如下所示:
username 1
username 2
username 3
但它不包含所需的类别或第二个数组
任何帮助都将不胜感激。谢谢你。如果有
<?php echo implode('","',$userSearchResult); ?>
根据手册-您应将数据设置为:
var data = [
{ label: "anders", category: "" },
{ label: "andreas", category: "" },
{ label: "antal", category: "" },
{ label: "annhhx10", category: "Products" },
{ label: "annk K12", category: "Products" },
{ label: "annttop C13", category: "Products" },
{ label: "anders andersson", category: "People" },
{ label: "andreas andersson", category: "People" },
{ label: "andreas johnson", category: "People" }
];
因此,在您的情况下,您需要修改php数组:
$userSearch = $pdo->prepare("SELECT username FROM members");
$userSearch->execute([]);
$userSearchResult = [];
while ($row = $userSearch->fetch(PDO::FETCH_ASSOC)) {
$userSearchResult[] = [
'label' => $row['username'],
'category' => "username"
];
}
// same to teamnames
$teamSearchResult = [];
$result = array_merge(
$userSearchResult,
$teamSearchResult
);
和javascript:
$("#searchBox").catcomplete({
source: <?php echo json_encode($result)?>
});
$(“#搜索框”).catcomplete({
资料来源:
});
为什么您需要使用内爆
,已经有了json\u encode
可用,您使用json\u encode是正确的,但是这并没有改变结果。他们仍然显示逗号的第一个感谢伟大的答案!第二,对不起我回来了哈哈。我知道这是一个单独的问题,但我想我会问你,而不是我开始另一个问题,因为你似乎比我更有知识!这张单子显示得很完美。只是我不能用鼠标或按键选择一个选项。我已经尝试过使用select:函数加载选项,但不知道是否有用。select:function(event,ui){$(“#searchBox”).val(ui.item.label);return false;}没有像我尝试过的其他方法那样有效。我只是快速查看了文档以回答第一个问题,所以我很难说出第二个错误的原因。我相信你能回答一个新问题,并希望它能帮助你)
$userSearch = $pdo->prepare("SELECT username FROM members");
$userSearch->execute([]);
$userSearchResult = [];
while ($row = $userSearch->fetch(PDO::FETCH_ASSOC)) {
$userSearchResult[] = [
'label' => $row['username'],
'category' => "username"
];
}
// same to teamnames
$teamSearchResult = [];
$result = array_merge(
$userSearchResult,
$teamSearchResult
);
$("#searchBox").catcomplete({
source: <?php echo json_encode($result)?>
});