javascript - 为什么即使没有失去焦点,React onChange 也能工作?
问题描述
只有当您将焦点移出输入字段时,HTML 中的此类函数才会起作用:
<input onchange="changeInput()" type="text"></input>
但是在 React 中,onChange
即使没有失去焦点,受控输入也会触发:
<input value={this.state.textVal} onChange={this.changeInput} type="text"></input>
这是因为合成事件还是其他原因?我在任何地方都找不到明确的答案。
解决方案
触发回调的实际浏览器事件作为nativeEvent
React 事件的属性传递。通过console.log
作为回调传递给onChange
元素的input
,我们可以看到原生事件的类型是'input'
。
可以使用 JavaScriptaddEventListener
方法复制此行为:
const setValue = ({ target }) => {
document.getElementById("myresult").innerHTML = target.value;
}
document.getElementById("myinput").addEventListener("input", setValue);
<input type="text" id="myinput">
<p id="myresult"></p>
推荐阅读
- php - 如何从php中的数组中删除特定元素
- git - 每次推送两个特定分支时,在 AWS::CodePipeline::Pipeline 中添加更多分支以启动管道
- javascript - 为什么隐藏的详细信息行在 BIRT 表中重复?
- python - 如何从当前脚本执行另一个 Python 文件?
- mysql - 在 mySQL 的另一个表中显示来自一个特定用户的数据
- bash - sed 在具有多次出现的 JSON 文件的 2 种模式之间替换
- ubuntu - nginx.service启动失败:未找到单元nginx.service
- keycloak - 将 Keycloak 与 Freeradius 集成
- kubernetes - 在本地基础设施上使用 DMZ 的入口
- tensorflow - InvalidArgumentError:矩阵大小不兼容:In[0]:[256,3],In[1]:[65,1] [[{{node dense_51/BiasAdd}}]]