无理由调用keyup和keydown事件

问题描述 投票:0回答:1

我有一个基于jQuery的单页应用程序和许多jquery插件,如jquery-address和jqueryvalidation。

此应用程序使用隐藏和显示div来提供单页面应用程序功能

在页面之间移动和处理应用程序一段时间之后,我从chrome得到了这种奇怪的行为,其中keyup和keydown事件在应用程序中的每个输入上自动触发,其中输入的包装器具有css display:none属性。

这个bug不能在每台机器上重现,如果我在不同的服务器上安装应用程序,它也不会在所有机器上发生。

并且为了让这个bug更加有线,如果我在同一台机器上使用隐身模式,它将无法在隐身模式下重现,同时清除缓存并在主窗口上重新加载将无法解决问题

我删除了我们拥有的所有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”)[0]); $ .getJSON( “http://localhost:3000”);并解雇了事件

我无法找到为什么这些事件被触发,我不知道为什么他们有isTrusted:true,他们也没有key属性或keyCode或任何属性来告诉你正在按下/模拟的是什么键

BTW:我没有在浏览器中安装任何扩展/插件

enter image description here

javascript jquery html google-chrome
1个回答
0
投票

在处理这些行为超过5天后,我发现了这种行为的原因,似乎如果我们提交一个带密码的表单,那么允许chrome保存密码,只有当我们在页面中输入隐藏密码时才会生成chrome如果我们将事件处理程序附加到该输入,则调用隐藏输入上的所有事件

我已经向chrome项目报告了这个错误

https://bugs.chromium.org/p/chromium/issues/detail?id=797530

© www.soinside.com 2019 - 2024. All rights reserved.