我正在使用 Jquery 自动完成功能,并且创建了一个自定义焦点方法。目标是在元素聚焦时呈现附加信息,然后在模糊时将元素返回到其默认状态。因为自动完成没有模糊方法,所以我使用 mouseleave 将我自己的方法组合在一起:
focus: function( event, ui ) {
event.preventDefault();
var menu = $(this).data("uiAutocomplete").menu.element;
var focused = menu.find("li:has(a.ui-state-focus)");
var child = $(focused).children().first();
var item = ui.item.value;
var text = "<div>" + item.name + "</div>";
if (item.publications.length > 0) text += "<div>" + item.publications + "</div>";
$(child).html(text).attr("name", item.name);
$(focused).on("mouseleave", function() {
$(child).html($(child).attr("name"))
});
},
虽然这适用于鼠标悬停,但当用户使用键盘上下导航列表时它不起作用。为此,我需要使用诸如 focusout 之类的东西:
$(focused).on("focusout", function() {
$(child).html($(child).attr("name"))
});
不幸的是,无论哪种方式,focusout 都没有明显的效果。没有错误消息,也没有更改的文本——甚至在鼠标悬停时也没有。知道发生了什么吗?