jquery-ui - 在 jquery 自动完成中重写 _rendermenu 会引发 js 错误

标签 jquery-ui jquery-autocomplete

我尝试在 jquery 自动完成中覆盖 _rendermenu。列表正在生成,但每次我将鼠标悬停在结果上时,都会收到以下 js 错误

未捕获类型错误:无法读取 jquery-ui.js 中未定义的属性“值”

使用的代码是

$(function () {
var availableTags = [
                "ActionScript",
                "AppleScript",
                "Asp",
                "BASIC",
                "C",
                "C++",
                "Clojure",
                "COBOL",
                "ColdFusion",
                "Erlang",
                "Fortran",
                "Groovy",
                "Haskell",
                "Java",
                "JavaScript",
                "Lisp",
                "Perl",
                "PHP",
                "Python",
                "Ruby",
                "Scala",
                "Scheme",
                "AA",
                "BB",
                "CC",
                "DD",
                "EE",
                "FF",
                "GG",
                "HH",
                "II",
                "JJ",
                "KK"
            ];


   var atComplete=$( "#autoCompleteText" ).autocomplete({
        delay:0,
        source:availableTags,
             autoFocus: true,
             minLength: 0,
             appendTo: "#result"          
}).focus(function () {
                $(this).autocomplete("search");
 }).data('ui-autocomplete');
   atComplete._renderMenu = function( ul, items ) {
            var that = this;
            $.each( items, function( index, item ) {
                    that._renderItem( ul, item );
            });
    };

    atComplete._renderItem = function(ul, item) {
        console.log("item in render item:",item);
            return $("<li>").data("item.autocomplete", item).append("<a>" + item.label + "</a>").appendTo(ul);
    };
});

最佳答案

如果你看API docs for _renderMenu您将看到错误的原因:

Creation of the individual <li> elements should be delegated to _renderItemData(), which in turn delegates to the _renderItem() extension point.

您直接使用renderItem()。这意味着您实际上并未将项目数据绑定(bind)到 .data('ui-autocomplete-item') 缓存,小部件在绘制菜单时会尝试读取该缓存 - 但由于它是未定义的,该页面抛出错误。

要修复此问题,您所需要做的就是将对 _renderItem 的调用更改为调用 _renderItemData:

atComplete._renderMenu = function( ul, items ) {
        var that = this;
        $.each( items, function( index, item ) {
                that._renderItemData( ul, item );
        });
};

关于jquery-ui - 在 jquery 自动完成中重写 _rendermenu 会引发 js 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34678503/

相关文章:

css - 如何使用 jQuery UI 设置非小部件内容的样式?

javascript - jquery 2.1.1 可排序示例不起作用

javascript - 随机重新定位 jQuery UI 对话框(复活节彩蛋)

Jquery UI 自动完成额外参数和自动填充 - 一个令人沮丧的解决方案

Jquery 自动完成与 knockoutjs

php - 如何将 JQuery UI 可排序表位置保存到 MySQL 数据库?

javascript - jQueryUI 图标总是显示在顶部而不是内联

jQuery 移动 : Listview Filter Search Callback Function

javascript - 如何将自动完成添加到动态创建的输入?

javascript - Jquery 自动完成不附加