2015-11-13 57 views
3

我有一个使用角度验证如下验证的登录表单“文本”的作用:谷歌浏览器的问题:模型的输入型“密码”没有更新,但是当浏览器自动填充保存的值

输入框的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> 

使用角度验证对登录名和密码字段验证“登录”按钮。

在页面刷新时保存这些字段(您想要保存用户名和密码功能)时,Google Chrome(其他浏览器的行为与预期相同),输入类型为'text' - > $ scope的模型。另一方面,输入类型'password' - > $ scope.password的模型始终是空的,并且根据验证逻辑,表单被声明为无效,并且'登录'按钮保持禁用状态输入字段将填入保存的信息(请参阅第一张附加图像)。

即使发生按键或鼠标点击(不一定在输入字段,但网页上的任何地方),瞬间密码的模型会被更新,表单将被验证,如附图所示。

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

任何建议,可能将光标移动到文本字段的末尾,以便窗体知道文本已被浏览器输入到密码字段中?

碰到这样的:AngularJS browser autofill workaround by using a directive

注:所有他上述溶液说说输入元素值,要么.VAL()或.value的方法,但棘手的问题是无论是在密码的情况下返回undefined得到答案输入字段。

但是没有运气!

谢谢。

enter image description here

enter image description here

+0

你可以显示你有问题的输入框的HTML以及按钮的HTML吗? – Claies

+0

因此,除了禁用的按钮,一切都按预期工作?我没有使用angulars验证服务,但你可以简单地设置一个超时函数:$ timeout(function(){if($ scope.password){login_form。$ invalid = false; form.state.accountLocked = false; form。 state.accountNotVerified = false}}) – Kyle

+0

是的,试过了,它告诉了究竟是怎么回事(游标在第0个位置):密码输入字段有一个空字符串,尽管浏览器会在密码输入中加载值框。所以不知何故,尽管密码字段根据$ scope.password变量填充了文本,但仍为空。 – npn

回答

0

至于建议由谢夫维斯曼(在上面的注释部分),并浪费这个好几个小时后,我已经放弃了AngularJs风格的验证过程的登录按钮,输入类型密码。

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

+1

虽然这可能会回答这个问题,但发布一堆链接并不是最佳实践。 – Markus

+0

谢谢你。不知道。 – npn

-1

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

指令代码的指令

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

HTML代码

<input type="text" ng-model="username" auto-complete /> 
+1

嗯。什么?这是非常无用的。 –

1

您可以使用

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

这将保持跟踪的模型值。只要模型有价值,您的代码$scope.$watch将被触发。