2013-04-11 35 views
9

Tôi có biểu mẫu đăng nhập đơn giản mà trên IE10 luôn có các trường biểu mẫu không hợp lệ khi tải trang mà không cần người dùng làm điều gì đó.Trường biểu mẫu AngularJS bị bẩn và không hợp lệ khi tải trang trên IE10 chỉ

các trường biểu mẫu là thực sự đơn giản:

<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

Trong plunker ở trên, bạn có thể tái tạo vấn đề bằng cách tập trung vào lĩnh vực này trong khi bên trong ứng dụng của tôi lĩnh vực báo lỗi sẽ được hiển thị khi tải trang . Trong các trình duyệt khác, nó hoạt động tốt.

Trả lời

4

Ai đó đã viết một gist cho điều này, mà tôi đã sao chép dưới đây với tất cả các bản mẫu cần thiết:

góc-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); 

Tôi có không đã có bất kỳ vấn đề với điều này cho đến nay, mặc dù tôi sẽ không giả vờ rằng tôi đã đặt nó thông qua bất kỳ thử nghiệm hồi quy nghiêm trọng. Nó lọc ra tất cả sự kiện đầu vào cho IE10 và có thể cần phải được thực hiện cụ thể hơn.

+0

Tôi sẽ kiểm tra nó, cảm ơn! Có vẻ như vấn đề với trường không hợp lệ khi tải trang do một trong các chỉ thị của tôi gây ra. Nhưng lỗi tập trung vẫn đứng vững. – lucassp

+3

@lucassp: Hành vi này có thể tái sản xuất mà không có chỉ thị tùy chỉnh nào và biến mất ngay khi bạn đưa ra trình giữ chỗ. Nó thực sự là một [vấn đề đã biết trên GitHub] (https://github.com/angular/angular.js/issues/2614). Vấn đề không phải là nó được đánh dấu không hợp lệ - đó là do thiết kế - vấn đề là nó cũng được đánh dấu bẩn, mà chỉ được cho là xảy ra khi bạn gõ vào trường. – Aaronaught

+0

@Aaronaught Tôi đã lấy phần giữ chỗ trên các đầu vào của mình, nhưng chúng vẫn được đánh dấu là không hợp lệ khi tải trang và điều đó khiến cho các lớp css lỗi của tôi được áp dụng khi tải trang. Mọi sửa chữa? :( – Ciwan

0

Giải pháp thay thế của tôi:

Thêm ng-if="true" vào yếu tố đầu vào.

Chỉ được thử nghiệm trên góc 1,2.28.

Các vấn đề liên quan