javascript - 为什么父级 onClick 在子级 onChange 之前触发

标签 javascript reactjs dom onclick onchange

我的 React 项目中有基本的 HTML,如下所示:

<div
  onClick={(e) => this.handleRowClick(e, id)}>
  <p>
    <input
      type="checkbox"
      onChange={this.handleSelectOneChange} />
  </p>
</div>

JS:

  handleRowClick(event, item_id) {
     // do stuff
  }

  handleSelectOneChange(event) {
    event.stopPropagation();
  }

当我单击该复选框时,它也会在父 Div 中触发 handleRowClick。即使我在子函数中有一个 stopPropagation() 。但是,当我登录时,它会在子(复选框)函数之前调用父函数,这样我就可以明白为什么 stopPropagation() 不起作用。

有更好的方法吗?或者我只需要在执行任何操作之前检查正在单击的元素类型。例如,在父单击函数中,如果“目标”是复选框,则不执行任何操作。这似乎是一种黑客行为,而不是处理此问题的正确方法。

最佳答案

单击复选框很可能会触发冒泡到 div 的“单击”事件。因此,您可能希望在输入点击事件冒泡之前捕获它。

试试这个怎么样:

<input
  type="checkbox"
  onClick={this.handleCheckboxClick}
  onChange={this.handleSelectOneChange} />
this.handleCheckboxClick(evt) {
  event.stopPropagation();
}

此片段显示了事件的顺序。单击该复选框会按以下顺序生成这些事件:

input onclick
div onclick
input onchange

<div onclick="console.log('div onclick');">
  Checkbox:
  <input type="checkbox"
    onclick="console.log('input onclick');"
    onchange="console.log('input onchange');" />
</div>

关于javascript - 为什么父级 onClick 在子级 onChange 之前触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61683928/

相关文章:

javascript - 如何检测文本区域上箭头键的按下事件?

javascript - setInterval CPU 密集吗?

javascript - ReactJS,更改存储在状态数组中的img src

reactjs - Electron和React的语法错误: unexpected token

dom - Chrome 扩展 : how do I do modify DOM of a determinate page with contextMenus?

javascript - 如何使用jquery获取元素后的同级文本?

javascript - 最初隐藏 iframe 时,Vimeo Javascript API 不起作用

javascript - 如何使用 jquery 在输入字段中显示变量?

javascript - 更改React组件中返回多个重复元素的单个元素的样式

jquery - 替换 DOM3 getUserData/setUserData 方法