我一直在努力让jquery自动完成工作,以我需要的方式工作。
到目前为止,我有这个工作正常:
<script>
$(function() {
var availableTags = [<?php
$taglist = Array();
foreach ($users as $user)
if ($user->getAttribute('first_name') == ''){
$taglist[] = '"'.$user->getUserName().'"';
}else{
$taglist[] = '"'.$user->getAttribute('first_name').' '.$user->getAttribute('last_name').'"';
}
echo join(',', $taglist);
?>];
$("#searchmem").autocomplete({
source: availableTags,
minLength: 2,
select: function(event, ui) {
$("#searchmem").val(ui.item.label);
$("#submit").click();
}
}).data("autocomplete")._renderItem = function (ul, item) {
return $("<li />")
.data("item.autocomplete", item)
.append("<a><img src='/files/avatars/1.jpg' />" + item.label + "</a>")
.appendTo(ul);
}
});
</script>
这将在相应用户的用户名或全名旁边输出图像/files/avatars/1.jpg。
我遇到的问题是尝试输出正确的用户头像。每个.jpg文件都与用户名相对应,因此我可以在src中使用$ user-&gt; getUserID(),但这不起作用,因为它不在$ user用户的$ user中。
我已经尝试将整个自动完成脚本放在foreach中,当测试时确实警告了正确的事情,但自动完成功能不起作用。
我也尝试过创建两个变量,例如
availableTags1 = {label:.... $ user-&gt; getUserName()etc ...}
availableTags2 = {avatar:.... $ user-&gt; getUserID()etc ...}
availableTags = availableTags1 + availableTags2;
和
.data("autocomplete")._renderItem = function (ul, item) {
return $("<li />")
.data("item.autocomplete", item)
.append("<a><img src=' + item.avatar + ' />" + item.label + "</a>")
.appendTo(ul);
}
但这又不起作用。我完全失去了!如何将图像与相关用户名一起输出?非常感谢帮助。
答案 0 :(得分:1)
在您的情况下,您必须构建一个类似的数组:
var availableTags = [
{label: '...', avatar: '...'},
{label: '...', avatar: '...'},
...
];
并使用:
.data("autocomplete")._renderItem = function (ul, item) {
return $("<li />")
.data("item.autocomplete", item)
.append("<a><img src='" + item.avatar + "' />" + item.label + "</a>") // Note the additional double quotes
.appendTo(ul);
}
(请参阅jQuery UI上有关使用自定义数据的示例)
然后,为了通过PHP生成数组,你应该使用:
<?php
$taglist = Array();
foreach ($users as $user) {
$data = array();
if ($user->getAttribute('first_name') == ''){
$data["label"] = $user->getUserName();
} else {
$data["label"] = $user->getAttribute('first_name').' '.$user->getAttribute('last_name');
}
$data["avatar"] = $user->getUserID();
$taglist[] = $data;
}
?>
var availableTags = <?php echo json_encode($taglist); ?>;