【发布时间】:2018-02-22 15:05:17
【问题描述】:
浏览器自动完成我的登录表单后,查询密码输入的值为空。单击密码字段后,该值神奇地可用,浏览器触发的许多事件也没有意义。 (密码输入的onChange不在其中。)
- 为什么
input[type=password]上的值是空的?- 为什么密码输入的自动完成不会触发
onChange事件?
(它会在正常输入时触发)- 额外问题:为什么会有第二个(不必要的)焦点/模糊事件?
1。两个输入都设置为type="text"
- 两个输入都渲染一次(无自动完成)
注意:我的输入是不受控制但有状态的,我会跟踪焦点、模糊、变化的状态变化
-
entered=true输入值时 -
focused=true当onFocus被解雇时,=false当onBlur被解雇时 -
peek=true当我需要以编程方式强制type从password到text
2。输入设置为type="password"
(查看表单是如何自动完成的。)
-
...
-
2.render (红色箭头) - 浏览器聚焦输入
-
onChange在电子邮件输入时触发 -
3.render - 内部状态已更改 (
entered=true) -
4.render - 浏览器未聚焦输入
-
5.render(黄色箭头) - 浏览器再次聚焦输入?
-
6.render - 浏览器未聚焦输入
浏览器未对 dom 元素进行任何更改 -
预览密码 - 以编程方式将输入类型更改为
text -
手动 validateForm() - 密码为空,表单无效
-
手动交互也说值为
""empty
有趣的是,在浏览器中按下 PrtScr 后,该值变为可用并重新呈现表单 - 就像手动聚焦输入时一样。
【问题讨论】:
-
感谢您努力使您的问题易于阅读。
-
是否尝试过使用受控和非受控输入?是不是一样的行为?
-
@MartinChaov 我还没有尝试过使用受控输入,但是当我回到这个项目时我会尝试。
标签: javascript reactjs autocomplete