我想要做的是通过jQueryUI的功能使用自动完成分类结果。经过一些谷歌搜索等我发现它有一个内置功能(http://jqueryui.com/demos/autocomplete/#categories),但该示例仅适用于本地数据源(javascript中的数组)。我正在处理远程数据源。它的自动完成端工作正常,没有添加类别代码,但在添加时会中断。
这意味着php代码很好(返回json数据的搜索页面)。
我从jQueryUI站点获取此代码:
$.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() {
$( "#search" ).catcomplete({
delay:0,
source: "query/encode-json.php?term="+ $("#search").val(),
select: function(event, ui){
alert(ui.item.label);
}
});
});
但它不起作用:(我已经google了很多但是其他人都遇到了json方面的问题。这是我的json数据:
[{"value":"some dude","id":"1","category":"artist"},{"value":"some other dude","id":"2","category":"artist"}]
答案 0 :(得分:2)
我很确定您的问题是您传递给自动填充的选项对象的source
属性:
$("#search").catcomplete({
delay:0,
source: "query/encode-json.php?term="+ $("#search").val(),
select: function(event, ui){
alert(ui.item.label);
}
});
实例化窗口小部件时, source
将评估一次。换句话说,每次用户输入时都不会执行$("#search").val()
。
由于默认情况下自动填充会在查询字符串中发送term
,因此您应该能够执行以下操作:
$("#search").catcomplete({
delay:0,
source: "query/encode-json.php",
select: function(event, ui){
alert(ui.item.label);
}
});
我很确定其他一切都是正确的,因为将数组用作具有类别的本地数据源可以正常工作:http://jsfiddle.net/jadPP/
答案 1 :(得分:0)
使用此:
http://www.jensbits.com/2010/03/29/jquery-ui-autocomplete-widget-with-php-and-mysql/
(更新)
希望这会有所帮助: - )
答案 2 :(得分:0)
默认_renderItem()
方法查找item.label
,但您的json数据包含item.value
。您需要更改encode-json.php脚本以使用label
而不是value
,或者您必须使用您提供自己的回调函数的source:
版本。< / p>