总结:所有添加项目的类别都需要与项目名称一起保存。然后,这允许在提交时传输此类别信息,以便使用正确的查询(与正确的表有关)。想法?
我需要做的是,当用户选择他们正在搜索的内容时(从自动完成下拉列表中),类别信息(也就是其类别的名称)也会记录在某处。
这个想法是,当用户按下搜索时,他们正在寻找的短语以及类别名称也会被发送。推理:你有3张桌子,一张包含汽车信息,一张关于动物,一张关于外星人。如果已确定与其相关的表(来自类别信息),则不需要查询全部3。
搜索所有3的问题是你可能有一个名叫Sponge Bob的外星人,以及一个动物等。
这是我们正在处理的代码(来自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 );
});
}
});
我的想法是在类别完成函数中,在select事件下:
$(function() {
$( "#search" ).catcomplete({
delay:0,
source: "query/encode-json.php?term="+ $("#search").val(),
select: function(event, ui){
}
});
});
与所选项目相关联的类别可以在某处发送/存储。我遇到的问题是我可以在widget函数(item.category)中获取此信息,但此信息在select事件中不可用(直接)。这是有道理的,因为小部件只填充列表,它不处理选择事件(我在想),但不知何故,我需要能够访问此信息。我的想法是找到索引并从那里向后工作,但这似乎不起作用。另一个选项(更基本的)是每次循环播放窗口小部件时,类别名称都会添加到li元素的标题字段中。
我已经尝试了几个小时而没有任何解决方案。
感谢您可以放下任何光线:)
答案 0 :(得分:0)
想出办法。这是我最终得到的代码:
$(".ui-menu-item").live('click', function(e) {
cat = $(this).prevAll(".ui-autocomplete-category:first").text();
});
起初我遇到了点击方面的问题,因为我没有意识到我需要它的实时性等等。所以试试这个:
$(".ui-menu-item").click(function () {
});
因此,它的作用是当选择(点击)其中一个搜索结果时,将获取上述类别的文本并将其分配给cat变量。我已将此变量设置为传输到重新搜索的搜索页面:
function test(){
var i = document.createElement('input');
i.type = 'hidden';
i.name = 'cat';
i.value = cat;
document.getElementById("searchForm").appendChild(i);
}