I am trying to distinguish between left and right clicks in an OnClick function. But,
var r = React.createClass({ handleClick : function(e){ //left click if(e.which==1){ //Do something } }, render : function(){ return <p onClick={this.handleClick}>Something </p> } });
Turns out e.which is undefined for Synthetic Events. How can I distinguish between left and right clicks here?
In order to work as a cross-browser application, React has created a wrapper same as the native browser in order to avoid creating multiple implementations for multiple methods for multiple browsers, creating common names for all events across browsers.
To override the default browser right-click menu, the first step is to prevent the default right-click behavior. This can be done by listening to the contextmenu event and using the preventDefault() method on the event. Next, capture the current (x,y) position, and render your component at that coordinate on the page.
event.stopPropagation() This will stop any parent component's event from firing. To use this: Make sure to pass the event object as a parameter. Use the stopPropagation method on the event object above your code within your event handler function.
You can do something like this too. Have both onClick and onContextMenu handlers
return <p onClick={this.handleClick} onContextMenu={this.handleClick}>Something </p>
You can either check for nativeEvent
as the other answer suggests or check for type
. (Also, prevent default if it is a right click.)
Using type
handleClick: function(e) { if (e.type === 'click') { console.log('Left click'); } else if (e.type === 'contextmenu') { console.log('Right click'); } }
Using nativeEvent
handleClick: function(e) { if (e.nativeEvent.which === 1) { console.log('Left click'); } else if (e.nativeEvent.which === 3) { console.log('Right click'); } }
Here is a demo http://jsbin.com/seyeliv/edit?html,output
The property you're looking for is e.button
or e.buttons
.
The button number that was pressed when the mouse event was fired: Left button=0, middle button=1 (if present), right button=2.
– MDN:Web/Events/click
However, with or without react, I'm only getting click events with the left mouse button (trackpad). You could use onMouseDown which works for me.
Here's a demo using e.buttons
. You may want to preventDefault in onContextMenu also.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With