是否有一种直接的方法来检测容器元素中的焦点变化?

时间:2016-02-28 04:43:24

标签: javascript html event-handling focus dom-events

在以下代码中:



div {padding: 10px; border: 1px solid black}
div.whenFocused {background: yellow}
input {display: block}
* {outline: none}

<div tabindex=0>
	Text:
	<input>
</div>
&#13;
&#13;
&#13;

是否有一种简单的方法可以直接或间接通过其中一个孩子检测DIV何时获得或失去焦点?

每当用户与之交互时,我都需要DIV具有黄色背景。 DIV是可聚焦的,因此用户可以通过键盘或鼠标到达那里 如果他们使用鼠标,单击DIV内的任何位置都必须触发背景颜色更改。此外,在DIV外部单击必须将背景颜色恢复为正常。

我已经通过几个辅助函数实现了这个行为,并且通过监听不同元素上的几个事件。但对于这么简单的事情,代码太多了。

我确信必须有一种简单明了的方式,但我现在无法想到这一种。
(简单来说,我的意思是听几个事件加上几个单行事件处理程序,然后就是这样)

1 个答案:

答案 0 :(得分:0)

我找到了一个使用jQuery的简单解决方案:

$('div').on('focusin focusout',function(){ $(this)[(this.contains(document.activeElement)?'add':'remove')+'Class']('whenFocused') })

这不是很简单,但至少它是一个单行。

需要支持:
focusin / focusout
Node.contains
document.activeElement