Редактировать: я решил это, установив closeOnEscape={false}
для модального окна, затем добавил eventhandlar, как в приведенном ниже коде, который слушает escape, а затем закрыл модальное вручную в случае, если я хочу.
У меня естьModal
с формой.По умолчанию Semantic UI закрывает модальное окно, если нажата Escape
.Мне нужно следующее поведение:
Если моя переменная состояния showNewModifierInput
равна true
и пользователь нажимает escape, я хочу установить showNewModifierInput
в false
, но модальный режим остается открытым.В противном случае модальное значение должно закрываться как обычно.
Я пытался отловить событие, когда нажата клавиша, и, если подходящие обстоятельства встретились, я бы вызвал функцию protectDefault (), чтобы остановить распространение события наместо, где SemanticUI вызывает модальную функцию закрытия.
Я использовал monitorEvents () в инструментах Chrome Dev и смотрел на все события, запускаемые в body
, когда я нажимал escape.Первым событием, которое было вызвано, было keydown, поэтому я добавил этот код к компоненту в моем модале:
constructor(props) {
// other code removed...
this.catchEscape = this.catchEscape.bind(this)
}
componentDidMount(){
document.addEventListener("keydown", this.catchEscape);
}
catchEscape(e){
if(e.key == 'Escape' && this.state.showNewModifierInput){
e.preventDefault()
this.setState({
...this.state,
showNewModifierInput: false
})
}
}
Модал все еще закрыт, так что предотвращение закрытия модала не предотвращаетэто другое событие, запускаемое перед body.key, чтобы инструменты chrome dev не ловили.
Цените любую помощь!