【发布时间】:2019-03-02 12:51:41
【问题描述】:
我正在开发一个应用程序,我需要使用jQuery 提供的autocomplete 函数进行输入。一切都很好,直到我在实际添加选项的<ul> 中添加更多元素。
我需要的是一些“上下文帮助”,我可以在其中向用户展示他可以在那里输入的一些基本查询。
在您多次按向上箭头键之前,它们会出现并且似乎有效。如果您在第一个元素上并按up 箭头键,则焦点将移至输入。如果我再次按up 箭头键,则会出现错误并且我的应用程序崩溃:
uncaught TypeError: Cannot read property 'value' of undefined
at $.(fiddle.jshell.net/_display/anonymous function).(anonymous function).menufocus (https://code.jquery.com/ui/1.12.1/jquery-ui.js:5831:25)
at HTMLUListElement.handlerProxy (jquery-ui.js:606)
........
down 箭头键工作正常。
您可以查看jsfiddle here 或以下地址。
如何复制错误:
关注输入框,写
COM;将出现一个虚拟的自动完成功能使用
down箭头键向下移动1-2个元素;然后,使用up箭头键移回第一个元素;按
up箭头键将焦点移到输入框上再次按
up箭头键
var tags = ["COMMAND_1", "COMMAND_2", "COMMAND_3", "COMMAND_4"];
$("#autocomplete").autocomplete({
open: function(e, ui) {
var autocompleteElement = $('.ui-autocomplete');
contextualItems = ["COMMAND_1 {item}", "COMMAND_2 {item}", "COMMAND_3 {item}", "COMMAND_4 [{item_1}, {item_2}]"]
autocompleteElement.append('<li class="ch">Contextual Help</li>');
for (var i = 0; i < contextualItems.length; i++) {
autocompleteElement.append('<li class="ui-autocomplete-category" style="background-color: #EEE; padding-top: 5px">' + contextualItems[i] + '</li>');
console.log(contextualItems[i]);
}
},
source: function(request, response) {
var matcher = new RegExp("^" + $.ui.autocomplete.escapeRegex(request.term), "i");
response($.grep(tags, function(item) {
return matcher.test(item);
}));
}
});
.ch {
background-color: #EEE;
border-top: solid 1px grey;
padding-top: 5px;
text-align: center;
font-weight: bold
}
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>autocomplete demo</title>
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/smoothness/jquery-ui.css">
<script src="//code.jquery.com/jquery-1.12.4.js"></script>
<script src="//code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
</head>
<body>
<label for="autocomplete">Select a programming language: </label>
<input id="autocomplete">
</body>
</html>
我尝试更改 div 中的上下文帮助,我尝试使用类别,但没有成功。你能给我一个提示或想法,我可以如何解决这个问题吗?
谢谢!
【问题讨论】:
-
小提琴在 Firefox 中对我来说很好用,但堆栈 sn-p 确实显示了错误。诡异的。编辑:对,我没有检查控制台
-
@ChrisG 是的,小提琴似乎“工作”,但错误就在那里。因此,我的真实应用程序完全崩溃了。
-
自动完成插件使用
.data()将信息与它在完成列表中创建的每个<li>关联起来。问题是您在类别中添加了自己的<li>,但它没有插件期望的数据。 -
here 是一个显示如何将类别添加到自动完成的问题
-
@Barmar 您链接的问题中的选定答案具有与 OP 描述的完全相同的错误。请链接一个显示问题已得到修复的小提琴。
标签: javascript jquery html css autocomplete