我有以下函数。它会监听所有元素的焦点事件。如果该元素位于$mobileMenu
或$menuItems
中,则允许它,否则将移除焦点:
var $body = $("body");
var $mobileMenu = $("#mobile-menu");
var $menuItems = $("#main-menu a");
$body.on("focus.spf", "*", function(e){
e.stopPropagation();
$this = $(this);
// Prevent items from recieving focus and switching view
if (!$this.is($mobileMenu) && !$this.is($menuItems)) {
$this.blur();
} else {
console.log(this);
}
})
我的问题是,如果一个本来可以被聚焦的元素现在变成了不可聚焦的,并且在我的白名单元素之前出现,那么用户就无法专注于任何事情,因为它会一遍又一遍地尝试重新聚焦在同一个元素上。
有没有人知道我如何告诉它跳到下一个可以聚焦的元素?
stopPropagation()
很有用,因为我们不想冒泡并浪费资源。基本上,当触发blur()
时,内部标签索引将被重置,因此每次您使用Tab键时,它都会尝试聚焦在第一个可聚焦元素上,这将导致其失去聚焦,而下一次再次使用Tab键时,则会再次尝试选择它。 - George Reith