确定表单输入是否具有焦点

Pro*_*imo 25 validation focus onchange angularjs

我正在AngularJS中进行验证,如果有3种类型的错误,我会显示一个div.

对于required,我只想在页面以空值提交时显示错误消息

<div class="error" data-ng-show="submitted && mainForm.email.$error.required" />
Run Code Online (Sandbox Code Playgroud)

对于正则表达式验证,我希望它标记实时的默认行为.

<div class="error" data-ng-show="mainForm.email.$error.pattern" />
Run Code Online (Sandbox Code Playgroud)

我面临的问题是minlength.我不想在打字时显示它.这很烦人,因为他们还没有完成打字.我也不想在提交时显示它,我认为为时已晚.当它们不再是元素的焦点时,我想展示它.

如果//mainForm.email.$focus存在,我可以简单地这样做

<div class="error" data-ng-show="mainForm.email.$error.minlength && 
!mainForm.email.$focus"/>
Run Code Online (Sandbox Code Playgroud)

有人知道有什么方法可以做这种检查或任何非抽出的替代方案吗?

谢谢!

Sah*_*ahu 49

是的,
您可以将ngFocus和ngBlur用于此目的

这是代码

<form name="mainForm">
    <span ng-show="mainForm.email.$error.pattern && !focus">error here</span>
    <input name="email" ng-pattern="..." ng-focus="focus=true" ng-blur="focus=false" type="text" />
</form>
Run Code Online (Sandbox Code Playgroud)

ngFocus和ngBlur采用表达式和ngShow显示真实的评估


Iss*_*oli 5

您需要了解ModelOptions,debounce和updateOn可以延迟模型更改触发器事件或触发DOM事件更改https://docs.angularjs.org/api/ng/directive/ngModelOptions

检查页面上的示例

<div ng-controller="ExampleController">
  <form name="userForm">
    Name:
    <input type="text" name="userName"
           ng-model="user.name"
           ng-model-options="{ updateOn: 'blur' }"
           ng-keyup="cancel($event)" /><br />

    Other data:
    <input type="text" ng-model="user.data" /><br />
  </form>
  <pre>user.name = <span ng-bind="user.name"></span></pre>
</div>
Run Code Online (Sandbox Code Playgroud)