formularze html5 z polyfills - czy warto?

Pomimo całego szumu wokół formularzy html5, wydaje mi się, że tworzysz dodatkową pracę, w większości scenariuszy, idąc tą drogą.

Weźmy na przykład pole datepicker. Natywna implementacja html5 tego renderuje inaczej w każdej przeglądarce. Ponadto Twoje rozwiązanie polyfilled (na przykład jQuery UI), dla przeglądarki nie obsługującej tej funkcji, również będzie renderowane inaczej.

Teraz wprowadziliśmy wiele punktów dostosowywania i konserwacji dla ta sama forma, kiedy mieliśmy doskonale działające i ujednolicone rozwiązanie z jquery!

Chciałbym usłyszeć o prawdziwych doświadczeniach w tej dziedzinie, ponieważ denerwuje mnie ten cały szum!

Author: alexander farkas, 2012-01-30

3 answers

Po pierwsze jestem twórcą webshims lib (jednego z tych polifili, który nie jest już utrzymywany). Aby odpowiedzieć na twoje pytanie:

Czy warto tworzyć formularze dla projektu?

Nie, naprawdę ciężko jest to zrobić tylko dla jednego projektu. Cóż, zrobiłem to, po prostu dlatego, że chcę korzystać z nowoczesnych technologii.

Czy warto używać forms polyfill jak webshims lib do projektu?

Tak, oczywiście! A oto dlaczego:

1. Nice standaryzowane deklaratywne API znaczników

Po włączeniu webshimów i skryptów:

//polyfill forms (constraint validation) and forms-ext (date, range etc.)    
$.webshims.polyfill('forms forms-ext');

Możesz po prostu wpisać swoje widżety i ograniczenia do formularza:

<input type="date" />
<input type="date" min="2012-10-11" max="2111-01-01" />
<input type="range" disabled />
<input type="email" required placeholder="Yo you can use a placeholder" />

Spowoduje to utworzenie 3 różnych widżetów i każdy z nich jest skonfigurowany inaczej. Żaden dodatkowy JS nie wymaga tylko standaryzowanego, czystego i szczupłego kodu.

2. Standaryzowane DOM-API

To samo dotyczy API DOM. Oto tylko dwa przykłady: łączenie dwóch pól daty i łączenie pola zakresu z polem daty.

3. działa bez JS w nowoczesnych przeglądarkach

Rozkłada się wdzięcznie w starych przeglądarkach i działa dobrze w nowoczesnych.

4. Mniejszy rozmiar pliku w nowoczesnych przeglądarkach

[9]} szczególnie dobre dla urządzeń mobilnych (iOS 5, Blackberry mają wsparcie dla daty na przykład)

5. Lepszy UX [głównie mobilny]

Better mobile UX (lepszy interfejs wejściowy dla dotyku, lepsza wydajność, pasuje do systemu), jeśli go używasz: type= "email", type= "number" and type= "date" / type= "range"

Ale co z możliwością dostosowania?

Jestem programistą w większej agencji i masz absolutną rację większość klientów i większość projektantów nie toleruje zbyt dużych różnic, ale nadal chcę korzystać z nowoczesnych technologii, co oznacza, że webshims lib może dać ci to, co najlepsze z obu światów.

Dostosowywanie walidacji ograniczeń

Polyfilling część

//polyfill constraint validation
$.webshims.polyfill('forms');

Dostosowywanie interfejsu użytkownika dla bąbelka błędu:

//on DOM-ready
$(function(){
    $('form').bind('firstinvalid', function(e){ 
        //show the invalid alert for first invalid element 
        $.webshims.validityAlert.showFor( e.target ); 
        //prevent browser from showing native validation message 
        return false; 
    });
});

Generuje następujące znaczniki:

<!-- the JS code above will generate the following custom styleable HTML markup for the validation alert -->
<span class="validity-alert-wrapper" role="alert"> 
    <span class="validity-alert"> 
        <span class="va-arrow"><span class="va-arrow-box"></span></span> 
        <span class="va-box">Error message of the current field</span> 
    </span> 
</span>

Dostosowywanie stylu nieprawidłowego / poprawnego pola formularza:

.form-ui-invalid {
    border-color: red;
}

.form-ui-valid {
    border-color: green;
}

Dostosowywanie tekstu alertu ważności:

<input required data-errormessage="Hey this is required!!!" />

A teraz o co chodzi:

  1. nadal działa bez JS
  2. nowoczesne przeglądarki ładują tylko kod dostosowywania (3KB min / gziped), a stare przeglądarki ładują dodatkowe API (około 13kb min / gzip) (formularze zawierają o wiele więcej niż tylko API walidacji ograniczeń, na przykład istnieje również autofocus, placeholder, output i tak dalej) {]}

A jaki jest Twój specjalny przykład, dostosowywanie pola danych?

No problem:

//configure webshims to use customizable widget UI in all browsers
$.webshims.setOptions('forms-ext', { 
    replaceUI: true
});

$.webshims.polyfill('forms forms-ext');

A także tutaj:

  1. nadal działa bez JS w nowoczesnych przeglądarkach
  2. nowoczesne przeglądarki ładują tylko interfejs użytkownika i klej UI-API, ale nie DOM-API (valueAsNumber, valueAsDate...)

A teraz nadchodzi najlepsze:

//configure webshims to use customizable widget UI in all non mobile browsers, but a customizable one in all desktop and all non-capable mobile browsers
$.webshims.setOptions('forms-ext', { 
    //oh, I know this is bad browser sniffing :-(
    replaceUI: !(/mobile|ipad|iphone|fennec|android/i.test(navigator.userAgent))
});

$.webshims.polyfill('forms forms-ext');
  1. mniejszy rozmiar pliku i lepszy UX dla przeglądarek mobilnych (większość klientów i większość projektantów pokocha cię za posiadanie innego interfejsu w telefonie komórkowym!!!)
  2. nadal działa bez JS w nowoczesnych przeglądarkach
  3. nowoczesne przeglądarki ładują tylko interfejs użytkownika i klej interfejsu UI-API, ale nie DOM-API (valueAsNumber, valueAsDate...)
 85
Author: alexander farkas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-29 10:01:00

Na poparcie odpowiedzi Alexandra webshims zrobiłem znaczne badania w zachowaniu cross przeglądarek wejść HTML5 z perspektywy UX, UI i front-end. Mój wniosek jest taki, że jedynym sposobem na preferowane zachowanie na urządzeniach i przeglądarkach jest użycie polyfill takiego jak webshims. Wiele z tego ma związek z tym, że nie jest w stanie korzystać z funkcji natywnych na urządzeniach takich jak rolki bębna do dat i klawiatur numerycznych dla numerów bez konieczności również obsługi pulpitu przeglądarki, które nie implementują tych funkcji.

Oto analiza zachowania wprowadzania daty w różnych implementacjach natywnych vs popularnych wtyczek:
Analiza danych wejściowych-arkusz kalkulacyjny Google
(Możesz zobaczyć, jak webshims dostaje najlepsze ze wszystkich implementacji)

Oto analiza tego, jak rzeczywiste typy danych wejściowych zachowują się w popularnych przeglądarkach natywnie i z zapasowym webshim:
analiza UX wejść HTML5 z webshim fallback-Google arkusz kalkulacyjny

Oto strona demonstracyjna użyta do analizy tych danych wejściowych:
HTML5 inputs page demo-CodePen

 5
Author: davidelrizzo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-02 03:00:47

Byłem też sceptyczny, jeśli naprawdę warto przejść przez warstwę polyfill zamiast używać prostego interfejsu jquery. Po użyciu webshims lib i HTML5, mogłem od razu zobaczyć, że jest znacznie mniejszy kod javascript. Nie jest już wymagana wtyczka walidacji. Dzięki Alexander za stworzenie i wspieranie tego wspaniałego polyfill, webshims lib. Oto przykład wykonania połączenia ajax w przesłanym kliknięciu formularza.

<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-1.9.1.js" type="text/javascript"></script>
<script src="http://code.jquery.com/ui/1.10.1/jquery-ui.js" type="text/javascript"></script>
<script>
    // set options for html5shiv
    if(!window.html5){
        window.html5 = {}; 
    }
    window.html5.shivMethods = false;
</script>
<script src="webshims/js-webshim/minified/extras/modernizr-custom.js"></script>
<script src="webshims/js-webshim/minified/polyfiller.js"></script>
    <script class="example">
        $.webshims.setOptions({
            //we do not use any DOM-/JS-APIs on DOM-ready, so we do not need to delay the ready event <- good against fouc
            waitReady: false
        });
        //load all polyfill features
        $.webshims.polyfill('forms forms-ext');     
    </script>
<script type="text/javascript">
$(function(){
    var frm = $('#tstForm');
    frm.submit(function () {
    var someDate=$('#someDate').val();
     alert('someDate:'+someDate);
     // you can make your ajax call here. 

        return false;
    });
});
</script>
</head>
<body>
<form id="tstForm">
  Some Date:<input id="someDate" name="someDate" type="date" min="2013-01-01" max="2013-06-01" ></input>
  Full Name:<input id="fullName" name="fullName" type="text" required></input>
  Age:<input id="age" name="age" type="number" required min="18" max="120"></input>
  <input type="submit" value="Submit"/>
</form>

</body>
</html>
 4
Author: Karthik Sankar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-07 05:21:36