原生js input一个值改变时自动修改另一个input的值
思否 问答 👍 2 含 AI 优化版
问题
原生js input一个值改变时自动修改另一个input的值
由大模型辅助整理,保留原意,优化结构与可读性。
问题概述
提问者希望实现“一个 input 的值发生变化时,自动同步修改另一个 input 的值”,用原生 JavaScript 实现,不借助框架。
涉及技术
JavaScript、DOM 事件、兼容性(IE)
期望结果
了解监听输入变化的合适事件类型,以及跨浏览器兼容、数据同步的实现思路。
回答
原始回答
2017-06-26
可以使用input和chagne,大概就是触发的时机不一样 http://jsrun.net/7UYKp
在ie里面使用input要加上propertychange避免他不兼容。然后呢还有一种办法就是数据绑定,大概的方案呢,就是有一个对象,他有getter和setter方法,然后input的时候改变这个对象,触发setter然后把所有关联的都改了。
AI 优化 · 回答整理
解答思路
可以监听 input 或 change 事件来感知值的变化,两者触发时机不同;对于需要兼容旧版 IE 的场景,还需要额外处理 propertychange 事件;更通用的做法是引入“数据绑定”的思想,用 getter/setter 统一管理数据变化。
详细说明
input事件:值每次发生变化(包括打字过程中)就会触发,反馈更及时。change事件:一般要等失去焦点或提交后才触发,反馈相对滞后。- 在旧版 IE 中,
input事件支持不完整,需要额外监听propertychange事件作为兼容方案,避免某些输入方式(如粘贴、拖拽)不触发input的问题。 - 更进一步的方案是做“数据绑定”:定义一个数据对象,通过
Object.defineProperty给字段配置getter/setter;当某个input的值变化时,去修改这个对象对应的属性,触发setter,在setter内部统一把新值同步给所有绑定了该字段的input,从而实现多个输入框联动更新。
小结
简单场景下监听 input/change 事件并互相赋值即可;如果输入框较多、联动关系复杂,推荐抽象出一层基于 getter/setter 的数据绑定机制,让 UI 与数据解耦,减少手写事件处理的复杂度。
由大模型辅助整理,保留原意,补充结构与代码格式。
回答转载自 SegmentFault