javascript - React - 按键事件首先在主体上触发,然后在元素上触发

标签 javascript html reactjs google-chrome-extension dom-events

我正在注入(inject)一些代码,这些代码会在互联网上的现有页面中创建文本输入。

在某些网站上,当用户在专注于我的文本输入时按下某些特定键时,事件将被捕获而不是冒泡。

我一直在尝试多种解决方案来防止这种情况,但它们似乎不起作用:

  keyUp = event => {
    event.preventDefault();
    event.nativeEvent.stopImmediatePropagation();
    event.stopPropagation();
    return false;
  };

<Form.Control
            as="textarea"
            onChange={this.updateInput}
            onKeyUp={this.keyUp}
            onKeyPress={this.keyUp}
            onKeyDown={this.keyUp}
          />

有没有办法可以阻止此事件在主体上触发,而不是首先在我的元素中触发?

最佳答案

React 默认将其事件监听器附加到 body 上,并使用它来触发自己的 SyntheticEvent

您可以尝试通过将 Capture 附加到事件名称来以捕获模式附加事件,如 here 所述。

编辑(添加以澄清评论): 将事件附加到您的窗口:

window.addEventListener("keydown", function (evt) {
  if (evt.target.id === 'elementID') {
    //do what you want to, here.
    //if you want to prevent the event propagating:
    evt.stopImmediatePropagation();
    evt.stopPropagation();
  }
}, true);

在你的jsx中:

...
<input id='elementID' />
...

关于javascript - React - 按键事件首先在主体上触发,然后在元素上触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60830245/

相关文章:

javascript - React/Javascript - 在运行函数之前等待变量填充

javascript - 如何创建用于组合多个图像的图像生成器?

javascript - 向 requestAnimationFrame 回调的函数添加额外的参数

javascript - 在不改变元素大小本身的情况下扩大 div 表面

javascript - 删除查询参数

javascript - 如果传递 null 则不会调用 Put 回调

javascript - 使用 knockoutJS 中的函数将 CSS 添加到 div

javascript - 使用 Greensock 的滚动动画问题

javascript - 如何使用reactjs生成nodejs Express应用程序

javascript - 如何将构建 react 应用程序(js,css)添加到 laravel 后端服务器