2013-04-11 8 views
9

Mam prosty formularz logowania, który na IE10 zawsze ma pola formularza nieprawidłowe, gdy strona ładuje się bez udziału użytkownika.Pole formularza AngularJS jest zabrudzone i nieważne, gdy strona ładuje się tylko na IE10.

pól formularza są bardzo proste:

<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

W plunker powyżej można odtworzyć problem, skupiając się na polu, podczas gdy w mojej aplikacji pole błędzie jest wyświetlany po załadowaniu strony . W innych przeglądarkach działa dobrze.

Odpowiedz

4

Ktoś napisał gist do tego, który ja reprodukowany poniżej wszelkich niezbędnych boilerplate:

kątowe-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); 

nie mam miałem z tym problemy, chociaż nie będę udawał, że przeszedłem przez jakiekolwiek poważne testy regresyjne. Odfiltrowuje zdarzenia wejściowe dla IE10 i może wymagać dokładniejszego określenia.

+0

Przetestuję to, dzięki! Wygląda na to, że problem z niepoprawnym polem na stronie został spowodowany przez jedną z moich dyrektyw. Ale błąd ostrości nadal występuje. – lucassp

+3

@lucassp: Zachowanie jest odtwarzalne bez żadnych niestandardowych dyrektyw i znika, gdy tylko usuniesz symbol zastępczy. W rzeczywistości jest to [znany problem na GitHubie] (https://github.com/angular/angular.js/issues/2614). Problem nie polega na tym, że jest oznaczony jako nieważny - jest to z założenia - problem polega na tym, że jest oznaczony jako brudny, co ma się zdarzyć tylko wtedy, gdy wpiszesz pole. – Aaronaught

+0

@Aaronaught Usunąłem symbole zastępcze na moich danych wejściowych, ale nadal są one oznaczone jako nieprawidłowe podczas ładowania strony, a to z kolei powoduje, że moje klasy błędów CSS są stosowane przy ładowaniu strony. Jakieś poprawki? :( – Ciwan

0

Moja obejście:

Dodaj ng-if="true" do elementu wejściowego.

Testowane tylko na kątowym 1.2.28.

Powiązane problemy