![](/img/trans.png)
[英]How to track the change when the browser autofills a password in a form after you type the username
[英]Google Chrome issue: Model for input type 'password' not updated but 'text' does when browser autofills saved values
我有一个使用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>
使用角度验证对登录名和密码字段验证“登录”按钮。
在Google Chrome中(其他浏览器按预期行为)保存这些字段时(如果要保存用户名和密码功能)刷新页面时,输入类型“text” - > $ scope.loginName的模型会更新为另一方面,保存的值输入类型'password' - > $ scope.password的模型总是为空的)并且根据验证逻辑形式被声明为无效并且'Login'按钮保持禁用,即使两个输入字段都是填充了保存的信息(参见第一张附件)。
即使按键或鼠标点击发生的那一刻(不一定在输入字段上,但在网页上的任何地方),不知何故更新密码模型并验证表格,如附加的第二张图片所示。
我尝试使用自动对焦,自定义自动对焦指令,超时但它似乎没有按预期工作。
任何建议,可能是将光标移动到文本字段的末尾,以便表单知道浏览器在密码字段中输入了文本?
碰到这个: AngularJS浏览器通过使用指令自动填充解决方法
注意:他在上面的解决方案中回答的所有问题都是通过.val()或.value方法得到的输入元素值,但是在密码输入字段的情况下,棘手的部分都是未定义的。
但没有运气!
谢谢。
你可以用
$scope.$watch('modelValue',function(newVal,oldVal){
//your code action
});
这将继续跟踪模型值。 只要模型具有价值,就会触发$scope.$watch
代码。
正如Ziv Weissman(在上面的评论部分中)所建议的那样,在浪费了相当多的时间之后,我放弃了Login按钮的AngularJs样式验证过程以及输入类型密码。
Chrome假装它没有该字段的值作为安全措施。 没有办法解决这个问题。 来自: 这里
我找到了这种行为的潜在解决方案 ,包括在延迟后重新捕获密码值。
只需添加此指令,并从输入中调用该指令
指令代码
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 />
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.