javascript - jquery 专注于 sibling 而不关注 parent

标签 javascript jquery html css jquery-focusout

我尝试通过触发 focus()keydown 事件上遍历 ul 中的所有 li 元素下一个兄弟 li 的事件。在这个过程中,我不想把注意力从父 ul 移出。 但它没有发生。即使改变对 sibling 的关注也会导致对 parent 的 focusout 事件。我希望只有当有人点击屏幕上的其他地方时,才应该将焦点从 parent 身上移开。

var KEY_DOWN=40;

$(document).on('keydown', 'li', function(e){
	let keyCode = e.keyCode || e.which;
	if(keyCode == KEY_DOWN)
	{
		if($(this).next().length != 0)
		{
			$(this).next().focus();
		}
		else
		{
			$(this).parent().children().first().focus();
		}
		return false;
	}
});

$(document).on('focusout','ul', function(e)
{
	console.log('focused')
});
li
{
  border: 1px solid black;
}

li:focus
{
  background: #999;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul tabindex="-1">
<li tabindex="-1">First</li>
<li tabindex="-1">Second</li>
<li tabindex="-1">Third</li>
</ul>

在代码片段中,重点是在每次按下按键时打印出来。如何解决这种情况。

最佳答案

由于事件冒泡,当您也从 li 中聚焦时,focusout 事件会为您记录消息。您可以使用 event 数据来检查您关注的地方。 (在此处阅读更多信息:jQuery figuring out if parent has lost 'focus')

但我想提一下我是怎么做到的。我宁愿检测我的 ul 之外的点击。

var KEY_DOWN=40;

$(document).on('keydown', 'li', function(e){
	let keyCode = e.keyCode || e.which;
	if(keyCode == KEY_DOWN)
	{
		if($(this).next().length != 0)
		{
			$(this).next().focus();
		}
		else
		{
			$(this).parent().children().first().focus();
		}
		return false;
	}
});

$(document).on('focusout','ul', function(e)
{
    console.log('focused out of li');
});

$(document).click(function() {
    console.log('focused out of ul');
});

$('ul').click(function(e) {
    e.stopPropagation();
});
li
{
  border: 1px solid black;
}

li:focus
{
  background: #999;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul tabindex="-1">
<li tabindex="-1">First</li>
<li tabindex="-1">Second</li>
<li tabindex="-1">Third</li>
</ul>

关于javascript - jquery 专注于 sibling 而不关注 parent ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44275233/

相关文章:

javascript - Jquery ajax 在 Firefox 中不起作用

javascript - 如何使此代码简短且最佳

javascript - Object.defineProperty 的调用后/运行时性能影响

javascript - 调试位于局部 View 中的脚本

javascript - 无法获取/设置微型 mce 编辑器的内容

javascript - 在谷歌地图中设置信息窗口圆 Angular

html - 2 导航条通过使用 iframe

html - 背景图像不适合所有屏幕尺寸

javascript - CSS 动画边框

javascript - <ul> 不是折叠的,只是扩展的