Мне нелегко найти документацию о том, что такое «предположим», когда происходит размытие элемента DOM.Что происходит, когда вы размываете элемент 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
- и пропускает все фокусируемые элементы на этом пути. Неясно, является ли тело даже сфокусированным, или просто обработчик по умолчанию для activeElement
, если ничего не сфокусировано.
Учитывая сложное объектно-ориентированное приложение javascript, в котором p2 не знает о p1, но предполагает, что что-либо выше в DOM будет получать фокус, я действительно полагаю, что вручную переверните DOM на каждом событии blur()
и искать фокусируемые элементы и фокусировать их самостоятельно?
Я думаю, что это адекватно объясняет, откуда мое замешательство. Я ошибочно предполагал, что «что-то» всегда должно быть сосредоточено, особенно если элементы в DOM имеют «подсказки», что они могут быть сфокусированы (tabindex = 0). Который, я все еще думаю, совершенно логичен, но я начинаю учиться, что логика модели событий DOM мало что значительна. Я исхожу из мира фреймворков, где единственным входным сигналом является ввод с клавиатуры (или пульт дистанционного управления), и мне кажется странным, что есть возможность не иметь фокуса. – helifreak