【问题标题】:Number input field loses focus on validation change数字输入字段失去对验证更改的关注
【发布时间】:2014-09-17 07:46:38
【问题描述】:

当验证状态从无效变为有效时,当前输入字段在 Firefox 上失去焦点 (Minimum working example in jsFiddle):

<div ng-repeat="elem in list track by $index">
    <ng-form name='innerform'>
        <input name="id" type="number" ng-model="elem.id" required/>
        <div ng-if="innerform.id.$error.required">Required!</div>
    </ng-form>
</div>

这种行为似乎发生在仅限 Firefox只有“数字”类型的输入字段。将其更改为“文本”或使用 Chrome 即可正常工作。

我在这里做错了什么还是 AngularJS 或 FireFox 中的错误?

【问题讨论】:

  • 没问题,我试过Chrome和Firefox,你用的是哪个浏览器版本?
  • 是的,它输了,firefox for mac。可能是一个错误..
  • Win7 上的 Firefox 30 和 31。 Chrome 36.0 有效

标签: forms angularjs validation


【解决方案1】:

这是 Firefox 在将块插入内联元素时的错误,而不是在 AngularJS 中。 即将推出的 FF 版本的修复程序已经在进行中:https://bugzilla.mozilla.org/show_bug.cgi?id=1045270

同时,caitp 在https://github.com/angular/angular.js/issues/8365 上提出了一个很好的解决方法:

添加 style="display: block;"或 style="display: inline-block;" (或者只是将这些添加到 CSS 文件或样式标签中)用于受影响的元素(在原始问题的情况下,ng-form)--- 或者,在块元素上使用 ng-form 属性。

【讨论】:

    【解决方案2】:

    这个问题的出现主要是因为 type="number"。将其更改为 type="email" 或其他它可以正常工作。

    Firefox 似乎不支持 type="number",但是,angular 确实对 Firefox 进行了 polyfill,以便 type="number" 输入字段在 Firefox 中正确运行(在验证等方面)。

    为了让它工作,它使用输入数字 polyfill。 SEE HERE

    SEE RELATED QUESTION HERE

    【讨论】:

    • 这对理解很有帮助,谢谢。但即使加载了额外的 polyfill,它仍然会失去焦点。但我将首先将数字字段替换为文本字段。
    • 我没有意识到数字验证(最小,最大)绑定到 type="number",所以在转换为 "text" 时我会丢失所有数字验证:-( 所以我会必须解决失去焦点的问题......我不关心向上/向下按钮等
    • 指出问题太难了。据我说输入类型=“文本”并在外部进行所有验证。另请阅读blakeembrey.com/articles/angular-js-number-validation-bug
    • 在不同的浏览器中 type="number" 似乎有很多问题。也检查一下stackoverflow.com/questions/17395188/…
    • 我刚开了一张AngularJS的票:github.com/angular/angular.js/issues/8365
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    • 2013-12-17
    • 2019-04-02
    • 2021-09-29
    • 1970-01-01
    • 2019-08-29
    • 2019-10-21
    相关资源
    最近更新 更多