退格键不会在角度1.5中触发ng-change / ng-keyup,它会删除文本框中的最后一个字符

时间:2016-08-22 20:56:36

标签: javascript angularjs

提前感谢您的任何建议。我一直用这个把头撞在墙上。到目前为止,我已尝试使用ng-change,ng-keyup和ng-keypress。

HTML

<input type="password" ng-model="newPass" id="passwd" ng-keyup="validatePassword()"/>

控制器

$scope.validatePassword = function () {
        var onecap = false;
        var onenum = false;
        var eightchars = false;

        if ($scope.newPass.match(/^(?=.*[A-Z])/)) {
            $scope.oneCap = true;
        } else {
            $scope.oneCap = false;
        }
        if ($scope.newPass.match(/^(?=.*\d)/)) {
            $scope.oneNum = true;
        } else {
            $scope.oneNum = false;
        }
        if ($scope.newPass.match(/^[A-Za-z\d$@$!$#$^$($)$_$+%*?&]{8,}$/)) {
            $scope.eightChars = true;
        } else {
            $scope.eightChars = false;
        }

        $scope.validated = onecap && onenum && eightchars;
    };

无论出于何种原因,&#39;删除/退格&#39;除非删除键正在删除文本框中的最后一个字符,否则每个范围变量都会更新没有问题。

我意识到我可以使用单个字符串来测试密码要求;我将它们分开以向用户显示其密码缺少的部分。

1 个答案:

答案 0 :(得分:0)

我通过阻止未定义变量与正则表达式的匹配来解决这个问题。

if ($scope.newPass !== undefined) {
  validatePassword();
} else {
  return false;
}