jQueryUI类别传递类别信息

时间:2012-08-02 09:18:23

标签: jquery jquery-ui autocomplete categories

总结:所有添加项目的类别都需要与项目名称一起保存。然后,这允许在提交时传输此类别信息,以便使用正确的查询(与正确的表有关)。想法?

我需要做的是,当用户选择他们正在搜索的内容时(从自动完成下拉列表中),类别信息(也就是其类别的名称)也会记录在某处。

这个想法是,当用户按下搜索时,他们正在寻找的短语以及类别名称也会被发送。推理:你有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元素的标题字段中。

我已经尝试了几个小时而没有任何解决方案。

感谢您可以放下任何光线:)

1 个答案:

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

来源:jquery find closest previous sibling with class