2017-05-08 42 views
1

提交按钮的形式应该被禁用,直到所有的字段被填充,但我注意到,当用户输入用户名的按钮来活着。angularjs-禁用提交,直到所有字段填充

<div class="list"> 
<form id="create" name="pw" method="post"> 
    <label class="item item-input item-stacked-label"> 
    <span class="input-label">Username</span> 
    <input type="text" placeholder="kojobaah" ng-model="username" required> 
</label> 

    <label for="password">New Password 
    <input type="password" name="user_password" ng-model="user_password" ng-required="confirm_password && !user-password" password-verify="confirm_pasword"> 
    <p ng-show="pw.user_password.$error.passwordVerify">Passwords do not match</p> 
    <p ng-show="pw.user_password.$error.required">This field is required</p> 
    </label> 
</p> 
<p> 
    <label for="password">Confirm Password 
    <input type="password" name="confirm_password" ng-model="confirm_password" ng-required="user_password && !confirm_password" password-verify="user_password"> 
    <p ng-show="pw.confirm_password.$error.passwordVerify">Passwords do not match</p> 
    <p ng-show="pw.confirm_password.$error.required">This field is required</p> 
    </label> 
    <br /> 
    <p align="center"><button ng-disabled="create.$invalid" class="button button-balanced" ng-click="register()">Create Account</button></p> 
    </form> 
    </div> 

JS

.directive('passwordVerify', function() { 
    return { 
     restrict: 'A', 
     require: '?ngModel', 
     link: function(scope, elem, attrs, ngModel) { 
      scope.$watch(attrs.ngModel, function() { 
       if (scope.confirm_password === scope.user_password) { 
        scope.pw.confirm_password.$setValidity('passwordVerify', true); 
        scope.pw.user_password.$setValidity('passwordVerify', true); 
       } else if (scope.confirm_password !== scope.user_password) { 
        scope.pw.confirm_password.$setValidity('passwordVerify', false); 
        scope.pw.user_password.$setValidity('passwordVerify', false); 
       } 
      }); 
     } 
    }; 
}) 

如何使禁用,直到用户名填写和密码一致的按钮任何帮助吗?

回答

2

您的表单名称为pw,因此您需要深入了解Angular的表单整体有效性指示的表单。

简单的改变:

<button ng-disabled="create.$invalid" 
     class="button button-balanced" 
     ng-click="register()"> 
     Create Account 
</button> 

到:

<button ng-disabled="pw.$invalid" 
     class="button button-balanced" 
     ng-click="register()"> 
     Create Account 
</button> 

工作Plunker:http://plnkr.co/edit/0zlN2TmEIbGQW5Mq7YJ0?p=preview

更新:切换ng-required简单的密码字段true和移动按钮上的ng-disabled指令的比较逻辑实现了所需的验证检查。

<button ng-disabled="pw.$invalid || (user_password != confirm_password)" 
     class="button button-balanced" 
     ng-click="register()"> 
     Create Account 
</button> 
+0

只是测试你的答案,但在输入密码之前,该按钮被激活 – user6579134

+0

这是因为验证检查只是填充了输入,而不是密码A与密码B匹配。 – couzzi

+0

你也可以帮助使用密码吗? – user6579134

1

由于您的窗体的名称是PW,只需更改您的创建帐户按钮:

<button ng-disabled="pw.$invalid" 
     class="button button-balanced" 
     ng-click="register()"> 
     Create Account 
</button> 
+0

我这样做了,但是只填写用户名文本框时,该按钮变为活动状态。它应该保持禁用,直到用户名被填写并且密码匹配 – user6579134

相关问题