谷歌浏览器问题:输入类型'密码'没有更新,但'文字'浏览器自动填充时保存的值

时间:2015-11-13 18:45:20

标签: javascript angularjs forms validation google-chrome

我有一个使用Angular验证验证的登录表单,如下所示:

输入字段的HTML:

                                <input id="loginName" name="loginName" type="text" class="form-control" placeholder="Username" data-ng-model="loginName" data-ng-maxlength="246" required>

                                <input id="password" name="password" type="password" class="form-control" placeholder="Password" data-ng-model="password" data-ng-maxlength="246" required>

&#39;登录&#39;使用角度验证对loginName和password字段验证按钮。

在Google Chrome浏览器(其他浏览器按照预期行为)保存这些字段时(如果您要保存用户名和密码功能)在刷新页面时,输入类型的模型&#39; text&#39; - &GT;另一方面,$ scope.loginName使用保存的值更新输入类型&#39;密码&#39;的模型。 - &GT; $ scope.password始终为空)并且根据验证逻辑表单声明无效并且“登录”#39;即使两个输入字段都填充了保存的信息,按钮也会保持禁用状态(参见第一张附图)。

即使发生按键或鼠标点击(不一定在输入字段上,但网页上的任何位置),不知何时更新密码模型并验证表格,如附加的第二张图片所示。

我尝试使用自动对焦,自定义自动对焦指令,超时但它似乎没有按预期工作。

任何建议,可能是将光标移动到文本字段的末尾,以便表单知道浏览器在密码字段中输入了文本?

遇到这个:AngularJS browser autofill workaround by using a directive

注意:他在上面的解决方案中回答的所有问题都是通过.val()或.value方法得到的输入元素值,但是在密码输入字段的情况下,棘手的部分都是未定义的。

但没有运气!

感谢。

enter image description here

enter image description here

4 个答案:

答案 0 :(得分:2)

您可以使用

$scope.$watch('modelValue',function(newVal,oldVal){
    //your code action
});

将继续跟踪模型值。只要模型具有价值,您的$scope.$watch内的代码就会被触发。

答案 1 :(得分:1)

正如Ziv Weissman(在上面的评论部分中)所建议的那样,在浪费了相当多的时间之后,我已经放弃了Login按钮的AngularJs样式验证过程以及输入类型密码。

Chrome假装它没有该字段的值作为安全措施。没有办法解决这个问题。来自:here

答案 2 :(得分:0)

我发现此行为potential solution涉及在延迟后重新捕获密码值。

答案 3 :(得分:-1)

只需添加此指令,并从输入的

中调用该指令

指令代码

most.js

HTML代码

Modeule.directive('autoComplete', function ($timeout) {
       return function (scope, iElement, iAttrs) {
           iElement.autocomplete({
               source: scope[iAttrs.uiItems],
               select: function () {
                   $timeout(function () {
                       iElement.trigger('input');
                   }, 0);
               }
           });
       };
   });