Так что нам нужно знать, в фокусе ли какой-либо из входов на странице, и если какой-либо из них находится в фокусе, тогда мы просто не будем ничего делать, чтобы показать или скрыть компоненты.
Давайте предположим, что наш компонентимеет в состоянии какое-то свойство, которое указывает, что некоторые входные данные на странице сфокусированы, давайте назовем это isFocus
.
Итак, нам нужно собрать все входные данные на странице, перебрать их все и назначить каждомувведите обработчики событий focus
и blur
, чтобы мы могли знать, когда следует изменять свойство isFocus
в состоянии.
Прежде всего нам необходимо собрать все входные данные.на странице мы делаем это с помощью:
const inputs = document.getElementsByTagName('input')
.
Перебираем их всех и назначаем обработчики событий focus
и blur
:
for (let input of inputs) {
input.addEventListener('focus', () => this.setState({isFocus: true}));
input.addEventListener('blur', () => this.setState({isFocus: false}));
}
* 1020И, наконец, давайте изменим условие для события
keypress
:
document.addEventListener('keypress', e => {
if (!this.state.isFocus && e.key === "t") {
this.setState({opened: !this.state.opened});
}
});
Все вместе будет выглядеть так:
componentDidMount() {
const inputs = document.getElementsByTagName('input');
for (let input of inputs) {
input.addEventListener('focus', () => this.setState({isFocus: true}));
input.addEventListener('blur', () => this.setState({isFocus: false}));
}
document.addEventListener('keypress', e => {
if (!this.state.isFocus && e.key === "t") {
this.setState({opened: !this.state.opened});
}
});
}
Надеюсь, это поможет.Удачи.