2012-02-19 117 views
3

我使用jQuery UI的自動完成功能。jQuery自動完成json源代碼 - 不自動完成,但只顯示完整列表

$("#search").autocomplete({ 
minLength: 0, 
source: 'source.php', 
select: function(event, ui) { 
    $("#search").val(ui.item.label); 
    return false; 
}, 
focus: function(event, ui) { 
    $("#search").val(ui.item.label); 
    return false; 
} 

});

我在source.php中插入了多個元素並將它們返回爲json編碼。

$search[] = array(
    'value' => $id, 
    'label' => $name 
); 
echo json_encode($search); 

當我開始輸入到自動填充字段的列表被示出爲具有source.php的元素。但不幸的是,所有這些。根據我在現場輸入的內容,它們不是過濾器。

當我使用json時,有什麼特別的選項需要設置嗎?

編輯:感謝T.J. Crowder我想出了這個解決方案,讓jQuery完成這項工作; )

$.getJSON('source.php', function(search) { 
    $("#search").autocomplete({ 
    minLength: 0, 
    source: search, 
    select: function(event, ui) { 
     $("#search").val(ui.item.label); 
     return false; 
    }, 
    focus: function(event, ui) { 
     $("#search").val(ui.item.label); 
     return false; 
    } 
}); 

回答

2

這是從文檔並不明顯,但是當你提供什麼爲source,這將涉及到運行代碼(無論是服務器端或客戶端),在jQuery UI的autocompleter預計篩選結果。在服務器端代碼的情況下,您可以使用它傳遞給PHP文件的參數term。從the docs

當使用字符串時,自動完成插件預計字符串以指向URL資源,將返回JSON數據。它可以位於同一臺主機上或不同的主機上(必須提供JSONP)。請求參數「term」被添加到該URL。數據本身可以採用與上述本地數據相同的格式。

(這將是很好的,如果他們真的提到濾波那裏;我logged an issue建議他們做更新:他們花了不到三個小時來更新文檔和關閉的問題;新文檔會至少通過V1.9在某些時候推,尼斯)

的autocompleter允許你在三個方面提供來源:!

  • 靜態源陣列:在這種情況下,autocompleter做的過濾。

  • 服務器端調用:在這種情況下,它傳遞了一個term參數,您需要使用它來過濾。

  • 客戶端調用:在這種情況下,它將request對象傳遞給您的客戶端代碼,該代碼具有term屬性;你需要使用它來過濾。

+0

謝謝,就是這樣。我正確地閱讀了這句話,但正如你所說,他們沒有提到「自己過濾」部分:) – 2012-02-19 13:48:26