我有一个基于jQuery的单页面应用程序和很多jquery插件,比如jquery-address和jqueryvalidation。
此应用程序使用隐藏和显示div来提供单页面应用程序功能
在页面之间移动并在应用程序上工作了一段时间后,我从chrome where keyup和keydown事件中获得了这种奇怪的行为,在应用程序中的每一个输入上都会自动触发keydown事件,其中输入的包装器具有css display:none属性。
这个错误不会在每台机器上重现,而且如果我在不同的服务器上安装应用程序,也不会在所有服务器上都发生。
如果我在同一台机器上使用匿名模式,它将不会在匿名模式下重现,而清除缓存和在主窗口上硬重新加载也不能解决这个问题
我删除了我们拥有的所有JavaScript代码,只保留了单个html表单和j查询库,并使用控制台成功执行了一次ajax调用,这些事件仍然在表单中仅有的两个隐藏输入上调用,而如果我使表单可见,则不会调用任何内容!!
最终的源代码
<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
<div style="display: none">
<input id="username" name="username" type="username">
<input id="password" name="password" type="password">
</div>
<script src="./js/lib/jquery-1.11.1.min.js"></script>
</body>
</html>这里是控制台的屏幕截图,您可以看到我只运行了monitorEvents($("body"));$.getJSON("http://localhost:3000");并触发了事件
我找不到为什么触发这些事件,也不知道它们为什么有isTrusted: true,它们也没有key属性或keyCode或任何属性来告诉您正在按下/模拟哪个键
顺便说一句:我没有在浏览器中安装任何扩展/插件

发布于 2017-12-24 21:06:16
经过超过5天的工作后,我发现了这种行为的原因,似乎是如果我们提交一个带有密码的表单,然后允许chrome保存密码,并且只有当我们在页面中隐藏密码输入时,如果我们将事件处理程序附加到该输入,那么chrome将调用隐藏输入上的所有事件
我已经向chromium project报告了这个bug。
https://bugs.chromium.org/p/chromium/issues/detail?id=797530
https://stackoverflow.com/questions/47953666
复制相似问题