【发布时间】:2017-12-08 02:39:52
【问题描述】:
var availableTags = [
"ActionScript",
"AppleScript",
"Asp",
"BASIC",
"C",
"C++",
"Clojure",
"COBOL",
"ColdFusion",
"Erlang",
"Fortran",
"Groovy",
"Haskell",
"Java",
"JavaScript",
"Lisp",
"Perl",
"PHP",
"Python",
"Ruby",
"Scala",
"Scheme"];
$("#test").autocomplete({
minLength: 0,
source: availableTags,
autoFocus: true,
select: function (event, ui) {
if (ui.item) {
event.preventDefault();
$(this).val(ui.item.label);
}
},
open: function (event, ui) {
var menu = $(this).data("uiAutocomplete").menu;
var items = $('li', menu.element);
for (var i = 0; i < items.length; i++) {
if (items.eq(i).text().startsWith($(this).val())) {
menu.focus(null, items.eq(i));
break;
}
}
},
focus: function (event, ui) {
event.preventDefault();
if ($(this).val() == "" && !event.keyCode) {
//debugger;
$('.ui-menu-item a').removeClass('ui-state-focus');
}
else {
//$(this).data("uiAutocomplete").menu.element.children().first().focus();
}
}
}).on("focus", function () {
$(this).autocomplete("search", "");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="form-group">
<label for="test" class="col-md-3 col-lg-3 control-label"></label>
<div class="col-md-9 col-lg-7">
<input id="test" type="text" class="form-control" />
</div>
</div>
在页面中切换时,默认情况下会使用下拉菜单中的第一个选项填写带有自动完成功能的输入。如果我设置minLength = 1,问题就解决了。但是,我必须保留minLength = 0,以便在输入焦点时弹出下拉菜单。
一个想法是在第一次弹出下拉菜单时删除焦点类。但问题是当我按下箭头时,第二个选项被聚焦而不是第一个。
我找不到任何解决方案来手动关注第一个选项。请帮忙。
任何其他解决方案都非常受欢迎。提前致谢。
【问题讨论】:
标签: jquery autocomplete focus autofocus