29

I'm new to React.js. I'm trying to trigger keypress event for text div.

Here is text box code for which I want to execute keypress trigger.

<div id="test23" contenteditable="true" class="input" placeholder="type a message" data-reactid="137">Hii...</div>

and keypress method is:

onKeyPress: function(e) {
   return "Enter" == e.key ? "Enter key event triggered" : void 0)
}

I tried it with jQuery but I can't trigger it.

Here is my React code that I tried but its not working:

var event = new Event('keypress', {
 'keyCode' : 13,
 'which' : 13,
 'key' : 'Enter'
});
var node = document.getElementById('test23');
node.dispatchEvent(event);
Brian Tompsett - 汤莱恩
  • 5,753
  • 72
  • 57
  • 129
Piyush
  • 1,528
  • 2
  • 24
  • 39

3 Answers3

3

If you create a reference to the div, then you can trigger an event on it. With hooks, you can use useRef. Without hooks, you can use createRef.

With hooks:

function MyComponent() {
  const ref = useRef();

  // This is simply an example that demonstrates
  // how you can dispatch an event on the element.
  useEffect(() => {
    ref.dispatchEvent(new KeyboardEvent('keypress', {
      key: 'Enter',
    }));
  }, []);

  return (
    <div
      ref={ref}
      id="test23"
      contentEditable={true}
      className="input"
      placeholder="type a message"
      data-reactid="137"
    />
  );
}

Without hooks:

class MyComponent extends React.Component {
  constructor(props) {
    super(props);
    this.ref = React.createRef();
  }

  // This is simply an example that demonstrates
  // how you can dispatch an event on the element.
  triggerKeyPress() {
    this.ref.dispatchEvent(new KeyboardEvent('keypress', {
      key: 'Enter',
    }));
  }

  render() {
    return (
      <div
        ref={this.ref}
        id="test23"
        contentEditable={true}
        className="input"
        placeholder="type a message"
        data-reactid="137"
      />
    );
  }
}

el.dispatchEvent(new KeyboardEvent('keypress',{'key':'a'}));
Matt Huggins
  • 81,398
  • 36
  • 149
  • 218
0

If you're trying to create a keyboard event, you can make use of KeyboradEvent constructor.

An enter key event can be dispatched like:

const event = new KeyboardEvent('keypress', {
  key: 'enter',
});
console.log(event) // KeyboardEvent {isTrusted: false, key: "enter", code: "", location: 0, ctrlKey: false, …}

FYI: The react-keydown package is good for implementing keyboard navigation or other shortcuts.

Vishnu
  • 1,611
  • 1
  • 14
  • 27
-4

Test util Simulate is designed to trigger events during unit tests.

Valéry
  • 4,574
  • 1
  • 14
  • 25