我有一个像这样的角形
<ng-form name="AddTaskForm" autocomplete="off">
......
</ng-form>
Run Code Online (Sandbox Code Playgroud)
但是,当我开始输入数据时,chrome仍然提示我先前输入的值.
如何阻止chrome(和所有浏览器)使用先前输入的值显示输入的任何下拉?
我做了一些搜索,发现人们正在编写自定义指令,但不确定这是否真的需要.
Luk*_*uke 20
尽管HTML是HTML5规范的autocomplete
一个相当明确的部分,但 Chrome已经突破了他们如何使用该autocomplete
属性.最初荣幸autocomplete="off"
(2013),他们然后决定开发人员必须使用它错误,浏览器应该忽略它.
这并不意味着没有非常有效的情况,您不希望浏览器自动填充数据(例如在CRM系统上),但总的来说,我们将这些视为少数情况.因此,我们开始忽略Chrome自动填充数据的autocomplete = off.
(来源:2015年的Chromium bug标记为WontFix)
根据选区优先顺序:
在发生冲突的情况下,考虑使用者而不是实施者而不是理论上纯度的说明者.换句话说,给用户的成本或困难应该比作者的成本更重要; 反过来应该给予实施者更多的权重而不是成本......
......这让我们的开发人员处于不幸的地方寻找解决方案.这从MDN文章概述了目前的状态很好,并提供设定的这个解决方案autocomplete
来new-password
:
如果作者想要阻止用户管理页面中的密码字段自动填充,用户可以为自己以外的其他人指定新密码,则应指定autocomplete ="new-password",但是尚未实现对此的支持.所有浏览器.
我不确定它会保持多长时间,但就目前而言(2016年9月在Chrome 53中测试过),这是最简单的解决方案:
<input type="password" name="someName" autocomplete="new-password" />
Run Code Online (Sandbox Code Playgroud)
编辑:注意:这有副作用,要求用户保存密码,可能会覆盖现有密码.因此,尽管它"防止密码字段的自动填充",但它并不完全从自动完成混乱中删除该元素.
编辑:更新信息:正如Alexander Abakumov在他的回答中指出的那样,Chrome的新版本再次尊重该autocomplete=off
属性.他让它适用于Chrome 68,适用于Chrome 70.
看起来 Chrome 忽略了autocomplete
individual 的属性inputs
;旧的解决方法是autocomplete=off
像您所做的那样添加整个表单(这是一个非常不完整的解决方案,因为它随后会将此功能添加到表单中包含的所有输入中,这可能是不需要的)。
无论如何,从这篇文章来看,解决方法似乎不再可用,因此您可能需要一个指令。我知道这可能不是您想要的,但我认为这是您对 chrome 的唯一选择。
myApp.directive('autocomplete', function() {
return {
restrict: 'A',
link: function( $scope, el, attr ) {
el.bind('change', function(e) {
e.preventDefault();
}
}
}
});
Run Code Online (Sandbox Code Playgroud)