javascript - 仅在 IE10 上加载页面时,AngularJS 表单字段脏且无效

标签 javascript angularjs

我有一个简单的登录表单,在 IE10 上,当页面加载而用户没有做任何事情时,表单字段总是无效。

表单域非常简单:

<input type="text" required class="input-block-level" placeholder="username" ng-model="username" name="username" tabindex="1">
<p class="text-error" ng-show="loginForm.username.$dirty && loginForm.username.$invalid">
    <span ng-show="loginForm.username.$error.required">required</span>
</p>

http://plnkr.co/edit/DNUanGGaZDgFWYrm3gLK?p=preview

在上面的 plunker 中,您可以通过关注该字段来重现该问题,而在我的应用程序中,页面加载时会显示错误字段。在其他浏览器中它工作得很好。

最佳答案

有人写了一个gist为此,我在下面复制了所有必要的样板文件:

angular-hacks.js:

(function (window, angular, undefined) {
    'use strict';
    var hacks = angular.module('hacks', []);
    hacks.config(['$provide', function ($provide) {
        $provide.decorator('$sniffer', ['$delegate', function ($sniffer) {
            var msie = parseInt((/msie (\d+)/.exec(angular.lowercase(navigator.userAgent)) || [])[1], 10);
            var _hasEvent = $sniffer.hasEvent;
            $sniffer.hasEvent = function (event) {
                if (event === 'input' && msie === 10) {
                    return false;
                }
                _hasEvent.call(this, event);
            }
            return $sniffer;
        }]);
    }]);
})(window, window.angular);

到目前为止我还没有遇到任何问题,尽管我不会假装我已经对它进行了任何严格的回归测试。它过滤掉了 IE10 的所有输入事件,可能需要更具体一些。

关于javascript - 仅在 IE10 上加载页面时,AngularJS 表单字段脏且无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15956037/

相关文章:

javascript - 如何捕获指令中的复选框事件?

javascript - knockout 引用绑定(bind)

javascript - 如何用jquery或JS获取当前页面的<head>内容

javascript - 如何创建复选框图像库

javascript - Angular Filter 不适用于 ng-options

javascript - 在 JSON 源数据中使用 AngularJS 表达式

JavaScript 正则表达式匹配将输入返回为前 2 个索引

java - 当我将水平滚动条移至最左侧时,垂直滚动条不可见

javascript - HTML 中 Angular ng- 属性的安全问题及缓解措施

validation - 如何在 Angular 中测试表单验证