Angularjs 电子邮件验证触发得太快?
Angularjs email validation fires too quickly?
我正在尝试验证 angularjs 中的电子邮件字段,如下所示:
<input type="email" ng-model="email" class="form-control" name="email" ng-required="true" placeholder="Email Address">
<span ng-show="loginForm.email.$touched && loginForm.email.$invalid">A valid email is required</span>
一切都按预期工作,但由于错误消息 "A valid email is required" 会在用户键入“.”时显示,因此呈现出糟糕的用户体验。然后会在用户继续输入时隐藏。因为电子邮件@电子邮件。无效,但电子邮件@email.com 有效。
问题是在用户完成输入之前验证发生得太快了。
我试图通过使用 $touched 标志来解决这个问题,但它只能在用户第一次输入电子邮件时解决。当他们返回更正电子邮件时,他们最终会在键入“.”时弹出错误消息。或域名中的“-”。
有人解决过这个问题吗?
我 运行 遇到了同样的问题,但我们很高兴在输入完整的电子邮件之前,表单将字段显示为无效。在我的脑海中——你可以推迟验证,直到输入字段失去焦点,或者使用自定义验证器,比如 lodash's debounce function?
您可以使用 ng-model-options
通过指定 ng-model-options="{updateOn:'blur'}"
来指定何时应该在模糊事件上进行模型更新(以及最终验证)。 您也可以在应用程序级别提供它,以便它适用于每个 ng-model
s。这将导致验证和模型更新在用户关注输入时触发。它也有 debounce
个选项。
<input type="email" ng-model="email" class="form-control" name="email"
ng-required="true" ng-model-options="{updateOn:'blur'}"
placeholder="Email Address" />
<span ng-show="loginForm.email.$touched && loginForm.email.$invalid">A valid email is required</span>
angular.module('app', []).controller('ctrl', function($scope) {
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.3/angular.min.js"></script>
<div ng-app="app" ng-controller="ctrl">
<form name="loginForm">
<input type="email" ng-model="email" class="form-control" name="email" ng-required="true" ng-model-options="{updateOn:'blur'}" placeholder="Email Address">
<span ng-show="loginForm.email.$touched && loginForm.email.$invalid">A valid email is required</span>
{{email}}
</form>
</div>
我正在尝试验证 angularjs 中的电子邮件字段,如下所示:
<input type="email" ng-model="email" class="form-control" name="email" ng-required="true" placeholder="Email Address">
<span ng-show="loginForm.email.$touched && loginForm.email.$invalid">A valid email is required</span>
一切都按预期工作,但由于错误消息 "A valid email is required" 会在用户键入“.”时显示,因此呈现出糟糕的用户体验。然后会在用户继续输入时隐藏。因为电子邮件@电子邮件。无效,但电子邮件@email.com 有效。
问题是在用户完成输入之前验证发生得太快了。
我试图通过使用 $touched 标志来解决这个问题,但它只能在用户第一次输入电子邮件时解决。当他们返回更正电子邮件时,他们最终会在键入“.”时弹出错误消息。或域名中的“-”。
有人解决过这个问题吗?
我 运行 遇到了同样的问题,但我们很高兴在输入完整的电子邮件之前,表单将字段显示为无效。在我的脑海中——你可以推迟验证,直到输入字段失去焦点,或者使用自定义验证器,比如 lodash's debounce function?
您可以使用 ng-model-options
通过指定 ng-model-options="{updateOn:'blur'}"
来指定何时应该在模糊事件上进行模型更新(以及最终验证)。 您也可以在应用程序级别提供它,以便它适用于每个 ng-model
s。这将导致验证和模型更新在用户关注输入时触发。它也有 debounce
个选项。
<input type="email" ng-model="email" class="form-control" name="email"
ng-required="true" ng-model-options="{updateOn:'blur'}"
placeholder="Email Address" />
<span ng-show="loginForm.email.$touched && loginForm.email.$invalid">A valid email is required</span>
angular.module('app', []).controller('ctrl', function($scope) {
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.3/angular.min.js"></script>
<div ng-app="app" ng-controller="ctrl">
<form name="loginForm">
<input type="email" ng-model="email" class="form-control" name="email" ng-required="true" ng-model-options="{updateOn:'blur'}" placeholder="Email Address">
<span ng-show="loginForm.email.$touched && loginForm.email.$invalid">A valid email is required</span>
{{email}}
</form>
</div>