jQuery的.keyup、.keydown和.keypress不能检测浏览器自动填充功能

8

我正在使用这些事件来评估表单输入,但如果浏览器自动填充表单,这些事件就不会触发。如何使事件在自动填充时也触发?


我之前研究过这个问题,我认为你无法做到,因为浏览器自动填充没有事件。不过如果有任何答案,我会很感兴趣的 :) - Christian
不知道你具体在做什么,你能否添加一个.change()事件处理程序呢?我甚至不确定该事件是否会在浏览器自动填充时触发。 - jaredhoyt
我会像Jared建议的那样尝试使用.change(),但如果这不起作用,你可能需要使用.blur() - nnnnnn
3个回答

5

我知道这是一个相当古老的问题,但是我解决了同样的问题,使用了keyup函数后的e.preventDefault()。

$("#email").keyup(function (e)  {
        e.preventDefault();

如果您使用浏览器自动填充功能并按Enter键选择建议选项,它会被识别。但是,如果您使用鼠标单击建议选项,则问题仍然存在,但是在选择后按任意键可以正常工作。

最终解决方案

我在stackoverflow上找到了这篇文章:https://dev59.com/JnA75IYBdhLWcg3wZ4Nr#24746108

并且使用 .on("input") 就可以解决问题!

$("#email").on("input",function (e)  {

2
很遗憾,没有办法检测到浏览器自动填充。相反,可以使用setInterval来定时运行一个函数,检查原始值(或空值)是否与输入值匹配,并以此触发响应。如果不想这样做,你可能无法解决问题,因为浏览器甚至不会触发.change,而任何事件都很可能不符合跨浏览器的标准。
另外,也可以在表单提交时运行验证事件,这样应该同样有效。

是的,使用提交技术的问题在于,我根据内容的验证更改输入边框的颜色,因此我需要每次更改时触发事件。 - A_funs

0

您可以通过绑定.click() 和/或 .dblclick()事件来模拟所需的行为。

虽然不保证,但如果用户从框中选择了自动完成,则可能会多出一次鼠标点击。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接