Malgré tout le buzz autour des formulaires html5, il me semble que vous créez du travail supplémentaire, dans la plupart des scénarios, en empruntant cette voie.
Prenons, par exemple, un champ de datepicker. L'implémentation html5 native de ceci s'affiche différemment dans chaque navigateur. De plus, votre solution polyfilled (jquery UI par exemple), pour un navigateur ne prenant pas en charge cette fonctionnalité, sera également rendue différemment.
Maintenant, nous avons introduit plusieurs points de personnalisation et de maintenance pour la même forme, lorsque nous avions une solution parfaitement fonctionnelle et unifiée avec jquery!
J'adorerais entendre parler de certaines expériences du monde réel dans ce domaine, car je suis ennuyé par tout le buzz!
Tout d'abord je suis le créateur de webshims lib (un de ces polyfills, qui n'est plus maintenu). Pour répondre à ta question:
Non, c'est vraiment difficile de le faire pour un seul projet. Eh bien, je l'ai fait, simplement parce que je veux utiliser des technologies modernes.
Oui absolument! Et voici pourquoi:
Après avoir inclus les webshims et les scripts suivants:
//polyfill forms (constraint validation) and forms-ext (date, range etc.)
$.webshims.polyfill('forms forms-ext');
Vous pouvez simplement écrire vos widgets et vos contraintes dans votre formulaire:
<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" />
Cela créera 3 widgets différents et chacun est configuré différemment. Aucun JS supplémentaire n'avait besoin d'un code standardisé, propre et allégé.
Il en va de même pour l'API DOM. Voici deux exemples: combinaison de deux champs de date et combinaison d'un champ de plage avec un champ de date .
Se dégrade gracieusement dans les anciens navigateurs et fonctionne bien dans les navigateurs modernes.
Particulièrement bon pour mobile (iOS 5, Blackberry ont un support pour la date par exemple)
Meilleure UX mobile (meilleure interface utilisateur d'entrée pour le toucher, meilleures performances, s'adapte au système), si vous l'utilisez: type = "email" , type = "number" et type = "date"/type = "range"
Je suis développeur dans une agence plus grande et vous avez absolument raison, la plupart des clients et la plupart des concepteurs ne toléreront pas beaucoup de différences, mais je veux toujours utiliser des technologies modernes, ce qui signifie que les librairies Webshims peuvent vous offrir le meilleur des deux mondes.
La partie polyfilling
//polyfill constraint validation
$.webshims.polyfill('forms');
Personnalisation de l'interface utilisateur pour la bulle d'erreur:
//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;
});
});
génère le balisage suivant:
<!-- 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>
Personnalisation du style d'un champ de formulaire invalide/valide:
.form-ui-invalid {
border-color: red;
}
.form-ui-valid {
border-color: green;
}
Personnalisation du texte de l'alerte de validité:
<input required data-errormessage="Hey this is required!!!" />
Et maintenant, quel est le point:
Aucun problème:
//configure webshims to use customizable widget UI in all browsers
$.webshims.setOptions('forms-ext', {
replaceUI: true
});
$.webshims.polyfill('forms forms-ext');
Et aussi ici:
Et maintenant, voici le meilleur:
//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');
À l'appui de la réponse d'Alexander sur les webshims, j'ai fait des recherches considérables sur le comportement entre les navigateurs des entrées HTML5 d'un point de vue UX, UI et frontal. Ma conclusion est que la seule façon d'avoir un comportement préféré entre les appareils et les navigateurs est d'utiliser un polyfill comme des webshims. Cela est en grande partie lié au fait de ne pas pouvoir utiliser les fonctionnalités natives sur des appareils tels que les rouleaux de barillet pour les dates et les pavés numériques pour les nombres sans avoir également un moyen de prendre en charge les navigateurs de bureau qui n'implémentent pas ces fonctionnalités.
Voici une analyse du comportement d'une entrée de date sur différentes implémentations natives par rapport aux plugins populaires:
Analyse de saisie de date - Feuille de calcul Google
(Vous pouvez voir comment les webshims tirent le meilleur parti de toutes les implémentations)
Voici une analyse de la façon dont les types d'entrée du monde réel se comportent sur les navigateurs courants de manière native et avec un repli webshim:
analyse UX des entrées HTML5 avec repli webshim - feuille de calcul Google
Voici la page de démonstration utilisée pour analyser ces entrées:
Démo de la page des entrées HTML5 - CodePen
J'étais également sceptique, si cela vaut vraiment la peine de passer par la couche polyfill au lieu d'utiliser l'interface utilisateur jquery droite. Après avoir utilisé les librairies Webshims et HTML5, j'ai pu immédiatement voir qu'il y avait beaucoup moins de code javascript. Plus de plugin de validation requis. Merci Alexander d'avoir créé et soutenu ce merveilleux polyfill, webshims lib. Voici un exemple pour effectuer un appel ajax dans le clic de soumission d'un formulaire.
<!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>