我有一个像这样的角形
<ng-form name="AddTaskForm" autocomplete="off">
......
</ng-form>
但是,当我开始输入数据时,Chrome仍然会提示我先前输入的值。
如何阻止chrome(以及所有浏览器)使用之前输入的值显示输入的任何下拉信息?
我做了一些搜索,发现人们正在编写自定义指令,但不确定这是否真的需要。
答案 0 :(得分:16)
尽管autocomplete
定义得非常明确part of the HTML5 spec,但Chrome已经突破了他们使用autocomplete
属性的方式。 Originally honoring autocomplete="off"
(2013),然后他们决定开发人员必须使用它错误,浏览器应该忽略它。
这并不意味着您不希望浏览器自动填充数据(例如在CRM系统上)的非常有效的情况,但总的来说,我们将这些视为少数群体案例。因此,我们开始忽略Chrome自动填充数据的autocomplete = off。
(资料来源:Chromium bug from 2015 marked as WontFix)
如果发生冲突,请考虑使用者超过实施者而非超过理论纯度的说明符。换句话说,给用户的成本或困难应该比作者的成本更重要;反过来,这应该比实施者的成本更重要......
......这让我们的开发人员处于一个不幸的地方寻找解决方案。 This article from MDN很好地概述了当前状态,并提供了将autocomplete
设置为new-password
的解决方案:
如果作者想要阻止在用户管理页面中自动填写密码字段,用户可以为自己以外的人指定新密码,则autocomplete =&#34; new-password&#34;应该指定,但尚未在所有浏览器中实现对此的支持。
我不知道这有效期有多长,但就目前而言(2016年9月在Chrome 53中测试过),这是最简单的解决方案:
<input type="password" name="someName" autocomplete="new-password" />
编辑:注意:这会产生副作用,要求用户保存密码,可能会覆盖现有密码。因此,虽然它确实阻止了密码字段的自动填充&#34;它不会完全从自动完成混乱中删除元素。
修改:已更新信息:较新版本的Chrome再次尊重autocomplete=off
属性as Alexander Abakumov pointed out in his answer。他让它适用于Chrome 68,适合我使用Chrome 70。
答案 1 :(得分:2)
autocomplete="off"
现在可以使用。在当前的Chrome 70.0.3538.110中进行了测试。
Demo。
答案 2 :(得分:1)
Chrome看起来忽略了autocomplete
个人的inputs
属性;旧的工作是像你一样在整个表单上添加autocomplete=off
(这是一个非常不完整的解决方案,因为它会将此功能添加到表单中包含的所有输入,这可能是不可取的。)< / p>
无论如何,从this post开始看起来似乎不再可用,所以看起来你可能需要一个指令。我知道这可能不是你想要的,但我认为这是你唯一的选择。
myApp.directive('autocomplete', function() {
return {
restrict: 'A',
link: function( $scope, el, attr ) {
el.bind('change', function(e) {
e.preventDefault();
}
}
}
});
答案 3 :(得分:1)
绝对可以。
对于Angular 2 +
添加 autocomplete =“ new-password” 进行输入。
更多参考,