2011-12-18 16 views
19

Jak sprawdzić, czy przeglądarka ma wbudowaną możliwość sprawdzania poprawności formularza HTML5? W ten sposób nie musimy stosować funkcji sprawdzania poprawności formularzy jQuery w przeglądarkach, które same mogą sprawdzać poprawność formularza.Sprawdź, czy przeglądarka ma wbudowaną weryfikację formularza HTML5?

[Solved] podstawie odpowiedzi ThinkingStiff, oto jest droga:

if (typeof document.createElement("input").checkValidity == "function") { 
    alert("Your browser has built-in form validation!"); 
} 

Odpowiedz

23

Wystarczy sprawdzić, czy funkcja checkValidity() istnieje:

Demo: http://jsfiddle.net/ThinkingStiff/cmSJw/

function hasFormValidation() { 

    return (typeof document.createElement('input').checkValidity == 'function'); 

}; 

nazwać to tak:

if(hasFormValidation()) { 
    //HTML5 Form Validation supported 
}; 
+0

Dziękuję. Ta metoda wygląda zwięźle. Przetestowałem to na moim lokalnym serwerze, a IE6/7/8/9 wydaje się nie być w stanie go uruchomić. Czy obejście jest dostępne? –

+0

Mam to. To dlatego, że IE6/7/8/9 nie może grać dobrze z textContent. –

+0

Tak, 'innerHTML' dla IE. Zaktualizowałem wersję demo. Dzięki. – ThinkingStiff

7

Można to zrobić za pomocą modernizr javascript http://www.modernizr.com/. Możesz wziąć pomoc z tego posta html5 form validation modernizr safari. Można również skorzystać z modernizr obciążenia

Podstawowa składnia Modernizr.load() jest przekazać mu obiekt z następującymi właściwościami:

  • Test: Właściwość modernizr chcesz wykryć.
  • yep: Lokalizacja skryptu, który chcesz załadować, jeśli test się powiedzie. Użyj tablicy dla wielu skryptów.
  • nop: Położenie skryptu, który chcesz załadować, jeśli test się nie powiedzie. Użyj tablicy dla wielu skryptów.
  • complete: Funkcja uruchamiana zaraz po załadowaniu zewnętrznego skryptu (opcjonalnie).

Zarówno tak jak i nie są opcjonalne, o ile dostarczono jedno z nich.

Aby załadować i wykonać skrypt w check_required.js dodaj następujący blok po modernizr.adc.js został dołączony do strony (kod jest w required_load.html):

<script> 
    Modernizr.load({ 
    test: Modernizr.input.required, 
    nope: 'js/check_required.js', 
    complete: function() { 
     init(); 
    } 
    }); 
</script> 

Źródło: http://www.adobe.com/devnet/dreamweaver/articles/using-modernizr.html

+2

Dziękuję. Ta metoda wygląda profesjonalnie. –

5

Jest problem z nawigatorów jak Android jednego (wersje przed 4.4), który implementuje checkValidity (a ta funkcja w rzeczywistości sprawdza wejścia), ale przeglądarka nie dostarcza żadnych informacji do użytkownika (i wysyła formularz), jeśli niektóre dane wejściowe są nieprawidłowe.

Można jednak sprawdzić, czy jest jakiś problem przy użyciu validationMessage. Ta właściwość wyświetla komunikat o błędzie, który przeglądarka wyświetli użytkownikowi. Jeśli checkValidity() ma wartość false, ale nie ma validationMessage, przeglądarka nie obsługuje pełnego sprawdzania poprawności formularza HTML5.

Zrobiłem tę funkcję.Wymaga ona jako argumenty wszystkie pola formularza:

canValidateFields() {  
    var result = typeof document.createElement('input').checkValidity == 'function'; 
    if (result) { 
     for (var i = 0; i < arguments.length; i++) { 
      var element = document.getElementById(arguments[i]); 
      if (!element.checkValidity() && (!element.validationMessage || element.validationMessage === null || element.validationMessage === '')) { 
       return false; 
      } 
     } 
    } 
    return result; 
} 

Próbka: http://jsfiddle.net/pmnanez/ERf9t/2/

+0

Dzięki za informacje. –

+0

Safari 8.0.4 nadal zwraca wartość true, mimo braku wbudowanego sprawdzania poprawności. – Sceletia

2

Poniższe testy nie działa dla Safari:

'noValidate' in document.createElement('form')

i

typeof document.createElement('input').checkValidity == 'function'

Zgłoszono true, gdy oczekiwano false, ponieważ Safari nie zgłasza nieprawidłowych pól.

Jednak badanie to działa:

'reportValidity' in document.createElement('form')

(nie testowane na IE lub Android)

EDIT: Safari ma potwierdzić, ale nie zgłasza, co tłumaczy reakcje na te testy. Nieprawidłowe pola można wykryć za pomocą pseudo klasy CSS :invalid. Połączenie tych testów może służyć do sprawdzania, gdzie przeglądarka nie obsługuje sprawdzania poprawności, i zgłaszania, gdzie przeglądarka nie zgłasza.

+0

Dziękuję za informację :) –

Powiązane problemy