AngularJS Chrome自动完成难题

鲶鱼

我有一个简单的登录表单,除非您使用Chrome的自动完成功能,否则该表单仅适用于桃花心木。

如果您开始输入并使用自动完成功能,并且该功能会自动填充您的密码,则我的angularjs模型的密码没有任何值。

我试图通过在表单上设置属性来关闭自动填充功能,autocomplete="off"但这似乎没有任何效果。

我该怎么做:1.如果有人使用Chrome的自动完成功能,请确保我能获得价值?2.禁用Chrome的自动完成功能?

<form class="form-signin" name="form" ng-submit="login()" autocomplete="off">

        <h3>Login</h3>

        <input type="email" name="email" class="form-control" placeholder="Email address" ng-model="user.email" required autofocus>
        <input type="password" name="password" class="form-control" placeholder="Password" ng-model="user.password" required>

        <button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>

 </form>
保利·普莱斯

从评论中添加的链接:Github Issue的

// Due to browsers issue, it's impossible to detect without a timeout any changes of autofilled inputs
// https://github.com/angular/angular.js/issues/1460
// https://github.com/angular/angular.js/issues/1460#issuecomment-28662156
// Could break future Angular releases (if use `compile()` instead of `link())
// TODO support select
angular.module("app").config(["$provide", function($provide) {
    var inputDecoration = ["$delegate", "inputsWatcher", function($delegate, inputsWatcher) {
        var directive = $delegate[0];
        var link = directive.link;

        function linkDecoration(scope, element, attrs, ngModel){
            var handler;
            // By default model.$viewValue is equals to undefined
            if(attrs.type == "checkbox"){
                inputsWatcher.registerInput(handler = function(){
                    var value = element[0].checked;
                    // By default element is not checked
                    if (value && ngModel.$viewValue !== value) {
                        ngModel.$setViewValue(value);
                    }
                });
            }else if(attrs.type == "radio"){
                inputsWatcher.registerInput(handler = function(){
                    var value = attrs.value;
                    // By default element is not checked
                    if (element[0].checked && ngModel.$viewValue !== value) {
                        ngModel.$setViewValue(value);
                    }
                });
            }else{
                inputsWatcher.registerInput(handler = function(){
                    var value = element.val();
                    // By default value is an empty string
                    if ((ngModel.$viewValue !== undefined || value !== "") && ngModel.$viewValue !== value) {
                        ngModel.$setViewValue(value);
                    }
                });
            }

            scope.$on("$destroy", function(){
                inputsWatcher.unregisterInput(handler);
            });

            // Exec original `link()`
            link.apply(this, [].slice.call(arguments, 0));
        }

        // Decorate `link()` don't work for `inputDirective` (why?)
        /*
         directive.link = linkDecoration;
         */
        // So use `compile()` instead
        directive.compile = function compile(element, attrs, transclude){
            return linkDecoration;
        };
        delete directive.link;

        return $delegate;
    }];

    $provide.decorator("inputDirective", inputDecoration);
    $provide.decorator("textareaDirective", inputDecoration);
    //TODO decorate selectDirective (see binding "change" for `Single()` and `Multiple()`)
}]).factory("inputsWatcher", ["$interval", "$rootScope", function($interval, $rootScope){
    var INTERVAL_MS = 500;
    var promise;
    var handlers = [];

    function execHandlers(){
        for(var i = 0, l = handlers.length; i < l; i++){
            handlers[i]();
        }
    }

    return {
        registerInput: function registerInput(handler){
            if(handlers.push(handler) == 1){
                promise = $interval(execHandlers, INTERVAL_MS);
            }
        },
        unregisterInput: function unregisterInput(handler){
            handlers.splice(handlers.indexOf(handler), 1);
            if(handlers.length == 0){
                $interval.cancel(promise);
            }
        }
    }
}]);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用angularjs自动完成

来自分类Dev

AngularJS自动完成

来自分类Dev

ngTagsInput /自动完成(AngularJS)

来自分类Dev

AngularJS自动完成

来自分类Dev

Angularjs自动完成键盘导航

来自分类Dev

Angularjs自动完成键盘导航

来自分类Dev

来自$ resource的自动完成Angularjs

来自分类Dev

AngularJs CheckBox难题

来自分类Dev

AngularJs CheckBox难题

来自分类Dev

如何创建AngularJS jQueryUI自动完成指令

来自分类Dev

在angularjs中自定义自动完成

来自分类Dev

使用多维数组中的AngularJS自动完成

来自分类Dev

AngularJs自动完成几乎可以正常工作

来自分类Dev

建立我自己的自动完成angularjs

来自分类Dev

AngularJs自动完成几乎可以正常工作

来自分类Dev

AngularJS 中的多个自动完成 - PHP (Laravel)

来自分类Dev

自动完成文本框和AngularJS

来自分类Dev

AngularJS-Google Place自动完成API密钥

来自分类Dev

Textarea自动完成angularjs仅10个元素

来自分类Dev

带有jQuery自动完成的AngularJS不起作用

来自分类Dev

自动完成文本框和AngularJS

来自分类Dev

AngularJS-Google Place自动完成API密钥

来自分类Dev

使用angularjs自动完成(无法获取输入值)

来自分类Dev

剑道自动完成动态数据源(AngularJS、剑道 ui)

来自分类Dev

Angularjs 自动完成 ng-click 不起作用

来自分类Dev

延迟加载自动完成数据列表 angularjs

来自分类Dev

AngularJS自动保存输入

来自分类Dev

像StackOverflow的输入标签一样的AngularJS自动完成标签?

来自分类Dev

HTML5 / AngularJS:如何拥有包含对象值的自动完成列表?