React 合成事件区分左右点击事件

IT技术 javascript reactjs dom-events
2021-03-30 18:15:55

我试图区分 OnClick 函数中的左键单击和右键单击。但,

var r = React.createClass({
   handleClick : function(e){
       //left click
       if(e.which==1){ 
          //Do something
       }
   },
   render : function(){
       return <p onClick={this.handleClick}>Something </p>
   }
});

结果是 e.which 对于Synthetic Events是 undefined 我如何区分左键和右键单击?

3个回答

你也可以做这样的事情。有 onClick 和 onContextMenu 处理程序

return <p onClick={this.handleClick} onContextMenu={this.handleClick}>Something </p>

您可以nativeEvent按照其他答案的建议进行检查,也可以检查type. (另外,如果是右键单击,则防止默认。)

使用 type

handleClick: function(e) {
  if (e.type === 'click') {
    console.log('Left click');
  } else if (e.type === 'contextmenu') {
    console.log('Right click');
  }
}

使用 nativeEvent

handleClick: function(e) {
  if (e.nativeEvent.which === 1) {
    console.log('Left click');
  } else if (e.nativeEvent.which === 3) {
    console.log('Right click');
  }
}

这是一个演示http://jsbin.com/seyeliv/edit?html,output

注意:对于 onMouseDown,它是 e.button === 0
2021-05-22 18:15:55
e.type 的值为左和中滚动单击的“单击”。=\(赞成,疯狂寻找这个答案)
2021-06-01 18:15:55

您正在寻找的属性是e.buttone.buttons

鼠标事件触发时按下的按钮编号:左键=0,中键=1(如果存在),右键=2。
MDN:Web/事件/点击

但是,无论是否有react,我只能使用鼠标左键(触控板)获得点击事件。您可以使用对我有用的 onMouseDown。

这里有一个演示使用e.buttons您可能还想在 onContextMenu 中防止默认。

利用:

if (e.button === 0) { // or e.nativeEvent.which === 1
    // do something on left click
}

这是一个演示