自动填充时表单字段值变了但没触发 change 事件怎么办?
我在做登录页,用户用浏览器自动填充账号密码后,JavaScript 监听的 change 事件完全没触发,导致“记住我”复选框状态判断出错。试过监听 input 也不行,只有手动输入才生效。
网上说可以用 focus + blur 模拟检测,但感觉很 hack。有没有靠谱点的办法能真正捕获到自动填充后的值变化?
document.getElementById('username').addEventListener('change', () => {
console.log('值变了!'); // 自动填充时这行从不执行
});
你可以使用 mutation observer 来监控表单字段的变化。虽然这不是传统意义上的事件监听,但它能捕捉到 DOM 的任何变动,包括自动填充。以下是实现方法:
这段代码会创建一个 mutation observer 实例,并观察 username 和 password 字段的 value 属性变化。只要 value 发生变化,就会触发回调函数,从而解决自动填充不触发事件的问题。
建议改成这种方式,应该能更好地应对浏览器的自动填充行为。