2013-02-09 52 views
0

我一直在嘗試幾天得到jquery自動完成工作的方式,我需要它。jquery自動完成與PHP foreach生成結果

到目前爲止,我有這個工作正常:

<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-> getUserID(),但這不起作用,因爲它不在$ users用戶的$ user循環中。

我曾嘗試將整個自動完成腳本放在foreach中,當測試時警告正確的東西但自動完成不起作用。

我也試着創建了兩個變量,如

availableTags1 = {標籤:.... $用戶> getUserName()等等...}

availableTags2 = {頭像:... 。$ user-> 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

你的情況,你必須建立像一個數組:

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); ?>; 
+0

謝謝!完美的作品! – user1871949 2013-02-09 23:59:13