使用php foreach生成结果的jquery自动完成

时间:2013-02-09 23:07:19

标签: php jquery image autocomplete foreach

我一直在努力让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);
}

但这又不起作用。我完全失去了!如何将图像与相关用户名一起输出?非常感谢帮助。

1 个答案:

答案 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); ?>;