ng-form和autocomplete =" off"

时间:2014-09-13 12:55:40

标签: html angularjs

我有一个像这样的角形

<ng-form name="AddTaskForm" autocomplete="off">
   ......
</ng-form>

但是,当我开始输入数据时,Chrome仍然会提示我先前输入的值。

如何阻止chrome(以及所有浏览器)使用之前输入的值显示输入的任何下拉信息?

我做了一些搜索,发现人们正在编写自定义指令,但不确定这是否真的需要。

enter image description here

4 个答案:

答案 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

根据Priority of Constituencies

  

如果发生冲突,请考虑使用者超过实施者而非超过理论纯度的说明符。换句话说,给用户的成本或困难应该比作者的成本更重要;反过来,这应该比实施者的成本更重要......

......这让我们的开发人员处于一个不幸的地方寻找解决方案。 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” 进行输入。

更多参考,

https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion#Preventing_autofilling_with_autocompletenew-password