Dans mes formulaires, j'aimerais utiliser les nouveaux types de formulaires HTML5, par exemple <input type="url" />
( plus d'informations sur les types ici ).
Le problème est que Chrome veut être super utile et valider ces éléments pour moi, sauf qu'il est nul. S'il échoue à la validation intégrée, il n'y a aucun message ou indication autre que l'élément obtenant le focus. Je préremplit les éléments URL avec "http://"
, et donc ma propre validation personnalisée traite simplement ces valeurs comme des chaînes vides, mais Chrome rejette cela. Si je pouvais changer ses règles de validation, cela fonctionnerait aussi.
Je sais que je pourrais simplement revenir à l'utilisation, type="text"
mais je veux les belles améliorations en utilisant ces nouveaux types d'offres (par exemple: il passe automatiquement à une disposition de clavier personnalisée sur les appareils mobiles):
Alors, existe-t-il un moyen de désactiver ou de personnaliser la validation automatique?
la source
inputmode
attribut qui, si je comprends bien ce que j'ai lu, peut être utilisé pour spécifier le type de clavier à offrir à l'utilisateur lorsqu'il interagit avec le champ, sans impliquer également de règles de validation. À un certain moment dans le futur, l'utilisation de l'inputmode
attribut au lieu de l'type
attribut sera probablement la bonne solution à ce problème - mais pas encore.$('[inputmode]').each(function () { this.attr({type: this.attr('inputmode'), novalidate: true}) });
inputmode
ferait. En faisant les choses à votre façon, vous ne pouvez toujours pas (par exemple) lire des valeurs non numériques que l'utilisateur tape dans une zone de saisie de typenumber
. Par exemple, essayez de taper quelque chose de non numérique dans la zone de texte de ce violon et de cliquer sur le bouton.<input type='number'>
n'accepte pas du tout les valeurs non numériques?Réponses:
Si vous souhaitez désactiver la validation côté client pour un formulaire en HTML5, ajoutez un attribut novalidate à l'élément de formulaire. Ex:
Voir https://www.w3.org/TR/html5/sec-forms.html#element-attrdef-form-novalidate
la source
novalidate="novalidate"
etnovalidate=""
est également une syntaxe valide.novalidate="novalidate"
méthode lorsque vous définissez lenovalidate => true
dans le$options
tableau duFormHelper::create()
. Merci bassim pour l'info supplémentaire :)J'ai lu la spécification et j'ai fait des tests dans Chrome, et si vous attrapez l'événement "invalide" et renvoyez false, cela semble permettre la soumission du formulaire.
J'utilise jquery, avec ce HTML.
Je n'ai testé cela dans aucun autre navigateur.
la source
invalid
événement et retourner faux ne permet pas au formulaire de se soumettre.Je voulais juste ajouter que l'utilisation de l'attribut novalidate dans votre formulaire empêchera uniquement le navigateur d'envoyer le formulaire. Le navigateur évalue toujours les données et ajoute les pseudo-classes: valide et: invalide.
J'ai découvert cela parce que les pseudo-classes valides et invalides font partie de la feuille de style HTML5 passe-partout que j'utilisais. Je viens de supprimer les entrées du fichier CSS liées aux pseudo-classes. Si quelqu'un trouve une autre solution, faites-le moi savoir.
la source
<form action="" method="" class="" id="" novalidate>
La meilleure solution consiste à utiliser une entrée de texte et à ajouter l'attribut inputmode = "url" pour fournir les fonctionnalités du clavier URL. La spécification HTML5 a été pensée à cet effet. Si vous gardez type = "url" vous obtenez la validation de la syntaxe qui n'est pas utile dans tous les cas (il est préférable de vérifier si elle retourne une erreur 404 au lieu de la syntaxe qui est assez permissive et n'est pas d'une grande aide).
Vous avez également la possibilité de remplacer le modèle par défaut avec l'attribut pattern = "https?: //.+" par exemple pour être plus permissif.
Mettre l'attribut novalidate dans le formulaire n'est pas la bonne réponse à la question posée car il supprime la validation de tous les champs du formulaire et vous souhaiterez peut-être conserver la validation des champs de messagerie par exemple.
L'utilisation de jQuery pour désactiver la validation est également une mauvaise solution car elle devrait absolument fonctionner sans JavaScript.
Dans mon cas, j'ai mis un élément select avec 2 options (http: // ou https: //) avant l'entrée URL car j'ai juste besoin de sites Web (et pas de ftp: // ou d'autres choses). De cette façon, j'évite de taper ce préfixe bizarre (le plus grand regret de Tim Berners-Lee et peut-être la principale source d'erreurs de syntaxe URL) et j'utilise une simple entrée de texte avec inputmode = "url" avec des espaces réservés (sans HTTP). J'utilise jQuery et le script côté serveur pour valider l'existence réelle du site Web (no 404) et pour supprimer le préfixe HTTP s'il est inséré (j'évite d'utiliser un modèle comme pattern = "^ ((? Http).) * $" pour éviter de mettre le préfixe car je pense qu'il vaut mieux être plus permissif)
la source
Au lieu d'essayer de faire un tour final autour de la validation du navigateur, vous pouvez mettre le
http://
in en tant que texte d'espace réservé. C'est à partir de la page que vous avez liée:Ce ne serait pas exactement la même chose car cela ne fournirait pas ce "point de départ" à l'utilisateur, mais il est au moins à mi-chemin.
la source
J'ai trouvé une solution pour Chrome avec CSS ce sélecteur suivant sans contourner le formulaire de vérification natif qui pourrait être très utile.
De cette façon, vous pouvez également personnaliser votre message ...
J'ai la solution sur cette page: http://trac.webkit.org/wiki/Styling%20Form%20Controls
la source
Utilisez simplement novalidate dans votre formulaire.
À votre santé!!!
la source
Voici la fonction que j'utilise pour empêcher chrome et l'opéra d'afficher la boîte de dialogue d'entrée invalide même lorsque vous utilisez novalidate.
la source
vous pouvez ajouter du javascript pour supprimer ces bulles de validation désagréables et ajouter vos propres validateurs.
la source
Si vous marquez un élément de formulaire comme
required=""
alorsnovalidate=""
ne pas d' aide.Un moyen de contourner la
required
validation consiste à désactiver l'élément .la source
Vous pouvez installer une simple extension Chrome et simplement désactiver la validation à la volée https://chrome.google.com/webstore/detail/html5-form-validation-err/dcpagcgkpeflhhampddilklcnjdjlmlb/related
par défaut, tout fonctionnera par défaut, mais vous pourrez désactiver la validation html5 en un seul clic sur l'icône d'extension dans la barre d'outils
la source