【问题标题】:jQuery autocomplete and focus eventjQuery 自动完成和焦点事件
【发布时间】:2011-06-05 23:14:59
【问题描述】:

早上好,

我在使用 jQuery UI 自动完成小部件事件时遇到了麻烦。 我想向所选项目的父 <li> 添加一个自定义类。 生成的标记看起来像:

<li class="result">
   <a><span></span></a>
</li>

当一个项目成为焦点时,jQuery 将 .ui-state-hover 类添加到 &lt;a&gt; 如何将类 .selected 添加到父 &lt;li&gt; ? 我试图从focus 事件中做到这一点,但我不知道如何访问父&lt;li&gt;。 我查看了 jQuery UI 的源代码,发现了 .ui-state-hover 的应用位置和方式,但没有帮助。

这是我的自动完成代码。

/**
* Override the default behavior of autocomplete.data('autocomplete')._renderItem.
*
* @param ul _object_ The conventional ul container of the autocomplete list.
* @param item _object_ The conventional object used to represent autocomplete data.
* {value:'',label:'',desc:'',icon:''}
*/
var renderItemOverride = function (ul, item) {
        return $('<li class="result"></li>')
                .data("item.autocomplete", item)
                .append('<a><span class="name">' + item.label + '</span><span class="type"></span></a>')
                .appendTo(ul);
};

$('#live_search').autocomplete({
    source: function(request, response) {

        $.ajax({
            url: "search.json",
            dataType: "json",
            cache: false,
            data: {
                term: request.term
            },
            success: function(data ) {
                response($.map(data.contacts, function(item) {
                    return {
                        label: item.name || (iterm.firstname + item.lastname),
                        value: item.name || (iterm.firstname + item.lastname),
                        id:    item._id
                    }
                }));
            }
        });

    },
    appendTo: '.live_search_result_list',
    autoFocus: true,
    minLength: 2,
    focus: function(event, ui) {

    },
    select: function(event, ui) {
        console.log("do a redirection");
    }

}).data('autocomplete')._renderItem = renderItemOverride;

})

任何忍者都可以帮忙吗?

【问题讨论】:

    标签: jquery-ui autocomplete focus


    【解决方案1】:

    怎么样:

    focus: function(event, ui) {
        $(".live_search_result_list li.result").removeClass("selected");
        $("#ui-active-menuitem")
            .closest("li")
            .addClass("selected");
    },
    

    然后,当菜单失去鼠标焦点时,从任何 lis 中删除 selected 类:

    $(".live_search_result_list ul").mouseleave(function() {
        $(this).children("li.result").removeClass("selected");
    });
    

    这是一个工作示例:http://jsfiddle.net/andrewwhitaker/4z3SQ/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-05
      • 1970-01-01
      • 2012-06-29
      • 2011-05-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多