Чтобы иметь возможность размыть ввод, не касаясь его, вам нужно сфокусировать другой элемент.
Можно было бы подумать, что простой вызов focus()
по умолчанию document.activeElement
(<body>
) подойдет, но это не так ... Браузеры все различаются в этом, и это одна часть спецификаций Я все еще изо всех сил пытаюсь оторвать голову.
Однако все браузеры согласны с тем, что элемент с атрибутом tabindex
! = -1 может быть сфокусирован программно. Таким образом, вы всегда можете установить этот атрибут в теле документа, который не должен изменять поведение фокуса по умолчанию вашего do c.
document.body.tabIndex = 0;
document.querySelector( 'input' ).onfocus = (evt) => {
console.log( 'will blur in 2s' );
setTimeout( () => {
console.log( 'blurring' );
document.body.focus()
}, 2000 );
};
<input placeholder="click here to gain focus">