jQuery自动完成数据未定义错误

时间:2013-08-21 06:04:27

标签: javascript jquery jquery-ui jquery-ui-autocomplete

我正在使用jquery v 2.0.0和jquery ui 1.10.3

以下是我的jquery ui自动完成代码:

$nameField.combobox({
            source: people,
            buttonSelector: '.toggleList',
            focus: function () {
                return false;
            },
            select: function (event, ui) {
                $nameField.val(ui.item.name).data({
                    id: ui.item.id,
                    name: ui.item.name,
                    birthdate: ui.item.birthdate
                });
                return false;
            }
        }).data('ui-autocomplete')._renderItem = function (ul, item) {
            if (!_.include(self.idArr, item.id)) {
                return $('<li></li>').data('ui-autocomplete-item', item).append('<a>' + item.name + '</a>').appendTo(ul);
            }
        };

这在旧版本的jquery中完美运行。但升级后,当我点击.toggleList按钮时,它会第一次打开,然后会有另一个按钮将所选名称添加到div中。之后,当我点击`.toggleList&#39;组合选择器,自动完成未打开。它给了我以下错误:

Uncaught TypeError: Cannot call method 'data' of undefined jquery.ui.autocomplete.js?1376892069:527

有人遇到过这样的问题吗?我尝试了其他stackoverflow线程中提到的几个修复程序,但它们都没有为我工作。

希望有人能帮助我解决这个问题

由于

1 个答案:

答案 0 :(得分:2)

我找到了解决方案!

有些人认为“ui-autocomplete”是错误的,所以他们使用“autocomplete”或“uiAutocomplete”,但这是错误的。实际上,“ui-autocomplete”是正确的方法。

我遇到了同样的问题,我和朋友发现了这段代码的问题。代替:

.data('ui-autocomplete')._renderItem = function (ul, item) {
            if (!_.include(self.idArr, item.id)) {
                return $('<li></li>').data('ui-autocomplete-item', item).append('<a>' + item.name + '</a>').appendTo(ul);
            }
        };

使用:

._renderItem = function (ul, item) {
            if (!_.include(self.idArr, item.id)) {
                return $('<li></li>').data('ui-autocomplete-item', item).append('<a>' + item.name + '</a>').appendTo(ul);
            }
        };

我认为组合框和自动完成功能会返回一个数据('ui-autocomplete'),所以如果你键入.data('ui-autocomplete'),你会做类似的事情:

.data('ui-autocomplete').data('ui-autocomplete')

出了什么问题......好吧,实际上我不知道为什么这不起作用,为什么没有这个工作,但相信我,删除.data('ui-autocomplete')并开心!