我很难找到任何有关“假设”在 DOM 元素模糊时会发生什么的文档。
我天真的假设是浏览器会遍历 DOM 以找到下一个可聚焦元素 - 但鉴于以下 jsfiddle,这显然不会发生。
<!-- HTML ----------------------------- -->
<body>
<div id="root" tabindex="0">root
<div id="p1" tabindex="0">p1
<div id="p2" tabindex="0">p2
</div>
</div>
</div>
</body>
/* Javascript */
var root = document.getElementById("root");
var p1 = document.getElementById("p1");
var p2 = document.getElementById("p2");
root.addEventListener('keydown', function(event) {
console.log("root keydown");
}, false);
p1.addEventListener('keydown', function(event) {
console.log("p1 keydown");
}, false);
p2.addEventListener('keydown', function(event) {
console.log("p2 keydown - blurring p2, hoping that focus will move up the dom to p1");
event.stopPropagation();
p2.blur();
if (document.activeElement !== p1)
console.log("well, that didn't work out so well :( ");
console.log("focused element = ");
console.log(document.activeElement);
}, false);
p2.focus();
console.log("focused element = ");
console.log(document.activeElement);
那么,有什么应该发生的定义吗?我看到 Chrome 发生的事情是activeElement
跳转到body
- 并跳过所有可聚焦的项目。尚不清楚 body 是否甚至是焦点,或者只是默认处理程序,activeElement
如果没有其他焦点。
给定一个复杂的面向对象的 Javascript 应用程序,其中 p2 不知道 p1,但假设 DOM 中更高的任何东西都会获得焦点,我真的想在每个blur()
事件上手动遍历 DOM 并搜索可聚焦的元素和自己集中注意力?