У меня есть текстовое поле автозаполнения JQuery. У меня есть таблица стилей CSS, которая определяет тему для фокусов (например, для обычного фокуса) и для наведения (например, для обычного пользователя). Таблица стилей может изменяться в зависимости от выбора темы пользователя. Я понимаю, что автозаполнение JQuery использует такие классы, как "ui-state-focus", чтобы стилизовать элементы автоматического предложения. Мне нужно заменить этот класс моим собственным классом, чтобы он соответствовал теме и изменял таблицу стилей, изменяя всю тему автозаполнения jquery. (Следовательно, я не могу просто переопределить классы автозаполнения по умолчанию). Я достиг этого на ходу с помощью следующей строки кода:
$(element).autocomplete({
source: function (request, response) {...})
focus: function (event, ui) {
event.preventDefault();
// adding this class gives desired result, and show correct styling on hover
$(".ui-autocomplete li a").addClass("custom-onhover");
if (ui != null) {
$(element).val(ui.item.value);
}
});
Однако я не могу найти способ получить тот же опыт, когда пользователь выбирает элемент с помощью клавиш со стрелками вверх/вниз по клавиатуре.
Я, наконец, смогу решить это, изменив фокус на:
$(".ui-autocomplete li a").removeClass("ui-corner-all");
$(".ui-autocomplete li a").addClass("custom-onhover");
$(".ui-autocomplete li a").removeClass("custom-focus");
var focussedElement = $(".ui-autocomplete .ui-state-focus");
focussedElement.removeClass("ui-state-focus");
focussedElement.addClass("custom-focus");