JQueryUI自动完成 - 自定义渲染; 专注不工作

Tud*_*scu 5 jquery-ui jquery-ui-autocomplete

我正在使用Jquery-ui版本1.10.3和jQuery 1.8.3并尝试实现自动完成服务器提取所获取的数据的自定义显示:

这是渲染覆盖的部分:

$(#"...").autocomplete(...)
 .data( "ui-autocomplete")._renderItemData = function( ul, item : Users.BriefUserDescriptor) {
    ul.data('ui-autocomplete-item', item);
    return $( "<li>" )
        .data('ui-autocomplete-item', item )
        .append( "<p>" + item.fullName + "<br>" + item.emailAddress+ "</p>" )
        .appendTo( ul );
};
Run Code Online (Sandbox Code Playgroud)

这有效.除了关注焦点的问题外,元素按我希望的方式显示:

focus: function( event, ui) {
            var currentUser : Users.BriefUserDescriptor = ui.item;
            $("#invitePersonInput" ).val(currentUser.fullName);
            return false;
        },
Run Code Online (Sandbox Code Playgroud)

这总是会触发错误,即currentUser(ui.item)未定义.

我已经尝试过几种'ui-autocomplete-item','uiAutocomplete'等组合,但到目前为止还没有人在这方面工作过,有些甚至都没能完成菜单填写.

任何提示都会很棒.

Tud*_*scu 8

好的,终于找到了问题.有必要在上面添加一个'ui-menu-item'类

  • 元素,否则JQuery无法正确选择并将项目移交给处理函数.

    覆盖renderItem而不是renderItemData似乎也是正确的方法.

    它应该看起来像:

    $(#"...").autocomplete(...)
     .data( "ui-autocomplete")._renderItemData = function( ul, item : Users.BriefUserDescriptor) {
        ul.data('ui-autocomplete-item', item);
        return $( "<li>" )
            .data('ui-autocomplete-item', item )
            .append( "<p>" + item.fullName + "<br>" + item.emailAddress+ "</p>" )
            .addClass('ui-menu-item')
            .appendTo( ul );
    };
    
    Run Code Online (Sandbox Code Playgroud)