Search code examples
reactjsreact-bootstrap

Listen to keypress for document in reactjs


I want to bind to close the active react bootstrap popover on escape press. Here is the code

_handleEscKey: function(event) {
  console.log(event);
  if (event.keyCode == 27) {
    this.state.activePopover.hide();
  }
},

componentWillMount: function() {
  BannerDataStore.addChangeListener(this._onchange);
  document.addEventListener("click", this._handleDocumentClick, false);
  document.addEventListener("keyPress", this._handleEscKey, false);
},

componentWillUnmount: function() {
  BannerDataStore.removeChangeListener(this._onchange);
  document.removeEventListener("click", this._handleDocumentClick, false);
  document.removeEventListener("keyPress", this._handleEscKey, false);
},

But nothing is getting logged in the console when I press any key. I have tried to listen that on window also and with different cases 'keypress', 'keyup', etc but it seems I am doing something wrong.


Solution

  • You should use keydown and not keypress.

    Keypress (deprecated) is usually used only for keys that produce a character output as per the docs

    Keypress (deprecated)

    The keypress event is fired when a key is pressed down and that key normally produces a character value

    Keydown

    The keydown event is fired when a key is pressed down.