Я работаю над приложением, в котором мне нужен ввод с функцией автозаполнения , предоставляемой jQuery
.Все в порядке, пока я не добавлю еще несколько элементов в <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 здесь или ниже.Как повторить ошибку:
Сфокусируйтесь на поле ввода и напишите 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
, я пытался использовать категории, но мне это не удалось.Можете ли вы дать мне подсказку или идею о том, как я мог бы решить эту проблему?Спасибо!