J'ai un problème aigu sur mon site Web. Dans Google Chrome, certains clients ne peuvent pas accéder à ma page de paiement. Lorsque j'essaie de soumettre un formulaire, j'obtiens cette erreur:
An invalid form control with name='' is not focusable.
C'est à partir de la console JavaScript.
J'ai lu que le problème pouvait être dû à des champs cachés ayant l'attribut requis. Maintenant, le problème est que nous utilisons les validateurs de champ requis pour les formulaires Web .net, et non l'attribut requis html5.
Il semble aléatoire qui obtient cette erreur. Y a-t-il quelqu'un qui connaît une solution à cela?
html
validation
mp1990
la source
la source
Réponses:
Ce problème se produit sur Chrome si un champ de formulaire échoue à la validation, mais en raison du contrôle invalide respectif n'étant pas focalisable, la tentative du navigateur d'afficher le message "Veuillez remplir ce champ" à côté de lui échoue également.
Un contrôle de formulaire peut ne pas être focalisable au moment où la validation est déclenchée pour plusieurs raisons. Les deux scénarios décrits ci-dessous sont les causes les plus importantes:
Le champ n'est pas pertinent selon le contexte actuel de la logique métier. Dans un tel scénario, le contrôle respectif doit être supprimé du DOM ou il ne doit pas être marqué avec l'
required
attribut à ce stade.Une validation prématurée peut se produire si un utilisateur appuie sur la touche ENTREE sur une entrée. Ou un utilisateur cliquant sur un bouton / contrôle d'entrée dans le formulaire qui n'a pas défini
type
correctement l' attribut du contrôle. Si l'attribut type d'un bouton n'est pas défini surbutton
, Chrome (ou tout autre navigateur d'ailleurs) effectue une validation à chaque fois que le bouton est cliqué, car ilsubmit
s'agit de la valeur par défaut de l'type
attribut d'un bouton .Pour résoudre le problème, si vous avez un bouton sur votre page qui fait autre chose que soumettre ou remis à zéro , souvenez - vous toujours de le faire:
<button type="button">
.Voir également https://stackoverflow.com/a/7264966/1356062
la source
required
ou ajouternovalidate
n'est jamais une bonne solution de contournement.number
champ caché où la valeur par défaut n'était pas divisible uniformément par la taille du pas. La modification de la taille de l'étape a résolu le problème.L'ajout d'un
novalidate
attribut au formulaire aidera:la source
<fieldset>
Dans votre
form
, vous pourriez avoir cachéinput
avoirrequired
attribut:<input type="hidden" required />
<input type="file" required style="display: none;"/>
Le
form
ne peut pas se concentrer sur ces éléments, vous devez retirerrequired
de toutes les entrées cachées, ou mettre en œuvre une fonction de validation en javascript pour les manipuler si vous avez vraiment besoin d' une entrée cachée.la source
required
.pattern
seul peut provoquer ce problème.<input type="hidden" required />
et un autre avec un<input type="text" style="display: none" required />
, et le seul qui affiche l'erreur dans Chrome est ledisplay: none
, tandis que"hidden"
celui se soumet bien.Au cas où quelqu'un d'autre aurait ce problème, j'ai vécu la même chose. Comme indiqué dans les commentaires, cela était dû au fait que le navigateur tentait de valider les champs masqués. Il cherchait des champs vides dans le formulaire et essayait de se concentrer sur eux, mais parce qu'ils étaient définis
display:none;
, cela ne pouvait pas. D'où l'erreur.J'ai pu le résoudre en utilisant quelque chose de similaire à ceci:
En outre, il s'agit peut-être d'un doublon de "Contrôle de formulaire non valide" uniquement dans Google Chrome
la source
Dans mon cas, le problème était d'
input type="radio" required
être caché avec:visibility: hidden;
Ce message d'erreur indiquera également si le type d'entrée requis
radio
oucheckbox
possède unedisplay: none;
propriété CSS.Si vous souhaitez créer des entrées radio / case à cocher personnalisées où elles doivent être cachées de l'interface utilisateur et conserver toujours l'
required
attribut, vous devez utiliser à la place:opacity: 0;
Propriété CSSla source
name=""
au lieu de l'original?Aucune des réponses précédentes n'a fonctionné pour moi, et je n'ai aucun champ caché avec l'
required
attribut.Dans mon cas, le problème est dû au fait d'avoir un
<form>
puis un<fieldset>
comme premier enfant, qui contient<input>
l'required
attribut with . La suppression du a<fieldset>
résolu le problème. Ou vous pouvez envelopper votre formulaire avec; il est autorisé par HTML5.Je suis sur Windows 7 x64, Chrome version 43.0.2357.130 m.
la source
Encore une autre possibilité si vous obtenez l'erreur sur une entrée de case à cocher. Si vos cases à cocher utilisent du CSS personnalisé qui masque la valeur par défaut et la remplace par un autre style, cela déclenchera également l'erreur non focalisable dans Chrome en cas d'erreur de validation.
J'ai trouvé cela dans ma feuille de style:
La solution simple consistait à le remplacer par ceci:
la source
Il se peut que vous ayez masqué (affichage: aucun) les champs avec l' attribut requis .
Veuillez vérifier que tous les champs obligatoires sont visibles par l'utilisateur :)
la source
Pour moi, cela se produit, quand il y a un
<select>
champ avec une option présélectionnée avec une valeur de '':Malheureusement, c'est la seule solution multi-navigateur pour un espace réservé ( comment puis-je créer un espace réservé pour une zone de sélection? ).
Le problème se pose sur Chrome 43.0.2357.124.
la source
Si vous avez un champ avec l'attribut requis qui n'est pas visible lors de la soumission du formulaire, cette erreur sera levée. Vous venez de supprimer l'attribut requis lorsque vous essayez de masquer ce champ. Vous pouvez ajouter l'attribut requis au cas où vous souhaitez afficher à nouveau le champ. De cette façon, votre validation ne sera pas compromise et en même temps, l'erreur ne sera pas levée.
la source
$("input").attr("required", "true");
ou au$("input").prop('required',true);
contraire, vous pouvezremove
l' attribut / propriété . >> jQuery add requis aux champs de saisiePour le problème Select2 Jquery
Le problème est dû à la validation HTML5 ne peut pas concentrer un élément non valide caché. Je suis tombé sur ce problème lorsque je traitais avec le plugin jQuery Select2.
Solution Vous pouvez injecter un écouteur d'événements et un événement «non valide» de chaque élément d'un formulaire afin de pouvoir le manipuler juste avant l'événement de validation HTML5.
la source
Il affichera ce message si vous avez un code comme celui-ci:
la source
Oui. Si un contrôle de formulaire masqué contient un champ obligatoire, il affiche cette erreur. Une solution serait de désactiver ce contrôle de formulaire . Cela est dû au fait que si vous masquez un contrôle de formulaire, c'est généralement parce que vous ne vous souciez pas de sa valeur. Cette paire de valeurs de nom de contrôle de formulaire ne sera donc pas envoyée lors de la soumission du formulaire.
la source
Vous pouvez essayer
.removeAttribute("required")
ces éléments qui sont cachés au moment du chargement de la fenêtre. car il est très probable que l'élément en question soit marqué comme caché en raison de javascript (formulaires à onglets)par exemple
Cela devrait faire l'affaire.
Cela a fonctionné pour moi ... cheers
la source
Une autre cause possible et non couverte dans toutes les réponses précédentes lorsque vous avez un formulaire normal avec des champs obligatoires et que vous soumettez le formulaire, puis le masquez directement après la soumission (avec javascript), ce qui ne laisse pas le temps à la fonctionnalité de validation de fonctionner.
La fonctionnalité de validation essaiera de se concentrer sur le champ requis et affichera le message de validation d'erreur mais le champ a déjà été masqué, donc "Un contrôle de formulaire non valide avec name = '' n'est pas focusable." apparaît!
Éditer:
Pour gérer ce cas, ajoutez simplement la condition suivante dans votre gestionnaire de soumission
Modifier: explication
En supposant que vous cachez le formulaire lors de la soumission, ce code garantit que le formulaire / les champs ne seront pas masqués tant que le formulaire ne sera pas valide. Ainsi, si un champ n'est pas valide, le navigateur peut se concentrer dessus sans problème car ce champ est toujours affiché.
la source
Il y a des choses qui me surprennent encore ... J'ai une forme avec un comportement dynamique pour deux entités différentes. Une entité nécessite des champs que l'autre n'a pas. Donc, mon code JS, selon l'entité, fait quelque chose comme: $ ('# periodo'). RemoveAttr ('required'); $ ("# periodo-container"). hide ();
et lorsque l'utilisateur sélectionne l'autre entité: $ ("# periodo-container"). show (); $ ('# periodo'). prop ('required', true);
Mais parfois, lorsque le formulaire est soumis, le problème apparaît: "Un contrôle de formulaire non valide avec nom = periodo '' n'est pas focalisable (j'utilise la même valeur pour l'identifiant et le nom).
Pour résoudre ce problème, vous devez vous assurer que l'entrée où vous définissez ou supprimez «requis» est toujours visible.
Donc, ce que j'ai fait, c'est:
C'est résolu mon problème ... incroyable.
la source
Dans mon cas..
ng-show
était utilisé.ng-if
a été mis à sa place et a corrigé mon erreur.la source
Pour une utilisation angulaire:
ng-required = "booléen"
Cela appliquera uniquement l'attribut html5 «requis» si la valeur est vraie.
la source
Je suis venu ici pour répondre que j'avais déclenché ce problème moi-même sur la base de NE PAS fermer le
</form>
balise ET en ayant plusieurs formulaires sur la même page. Le premier formulaire s'étendra pour inclure la recherche de validation sur les entrées de formulaire provenant d'ailleurs. Parce que ces formulaires sont masqués, ils ont déclenché l'erreur.donc par exemple:
Déclencheurs
la source
Il existe de nombreuses façons de résoudre ce problème, comme
<form action="...." class="payment-details" method="post" novalidate>
L'utilisation peut supprimer l'attribut requis des champs obligatoires, ce qui est également erroné car il supprimera à nouveau la validation du formulaire.
Au lieu de cela:
<input class="form-control" id="id_line1" maxlength="255" name="line1" placeholder="First line of address" type="text" required="required">
<input class="form-control" id="id_line1" maxlength="255" name="line1" placeholder="First line of address" type="text">
L'utilisation peut désactiver les champs obligatoires lorsque vous n'allez pas soumettre le formulaire au lieu de faire une autre option. C'est la solution recommandée à mon avis.
comme:
<input class="form-control" id="id_line1" maxlength="255" name="line1" placeholder="First line of address" type="text" disabled="disabled">
ou le désactiver via le code javascript / jquery dépend de votre scénario.
la source
J'ai trouvé le même problème lors de l'utilisation d'Angular JS. Cela était dû à l'utilisation de required avec ng-hide . Lorsque j'ai cliqué sur le bouton Soumettre alors que cet élément était masqué, il s'est produit l'erreur Un contrôle de formulaire non valide avec nom = '' n'est pas focalisable. enfin!
Par exemple, utiliser ng-hide avec requis:
Je l'ai résolu en remplaçant le requis par ng-pattern à la place.
Par exemple de solution:
la source
Pour les autres utilisateurs d'AngularJS 1.x, cette erreur est apparue parce que je masquais un contrôle de formulaire à afficher au lieu de le supprimer complètement du DOM alors que je n'avais pas besoin que le contrôle soit terminé.
J'ai corrigé cela en utilisant
ng-if
au lieu deng-show
/ng-hide
sur le div contenant le contrôle de formulaire nécessitant une validation.J'espère que cela vous aidera les autres utilisateurs de cas Edge.
la source
Permettez-moi de présenter mon cas car il était différent de toutes les solutions ci-dessus. J'avais une balise html qui n'était pas fermée correctement. l'élément n'était pas
required
, mais il était intégré dans unhidden
divle problème dans mon cas était avec le
type="datetime-local"
, qui était - pour une raison quelconque - validé lors de la soumission du formulaire.j'ai changé ça
dans ce
la source
Je voulais répondre ici car AUCUNE de ces réponses, ou tout autre résultat Google n'a résolu le problème pour moi.
Pour moi, cela n'avait rien à voir avec des ensembles de champs ou des entrées cachées.
J'ai trouvé que si j'utilisais
max="5"
(par exemple) cela produirait cette erreur. Si j'ai utilisémaxlength="5"
... pas d'erreur.J'ai pu reproduire l'erreur et effacer l'erreur plusieurs fois.
Je ne sais toujours pas pourquoi l'utilisation de ce code produit l'erreur, pour autant que cela indique qu'il devrait être valide, même sans "min" je crois.
la source
min='-9999999999.99' max='9999999999.99'
.Alternativement, une autre réponse infaillible consiste à utiliser l'attribut d'espace réservé HTML5, il ne sera donc pas nécessaire d'utiliser de validations js.
Chrome ne pourra trouver aucun élément vide, caché et requis sur lequel se concentrer. Solution simple.
J'espère que cela pourra aider. Je suis totalement trié avec cette solution.
la source
Je suis venu ici avec le même problème. Pour moi (injecter des éléments cachés au besoin - c'est-à-dire l'éducation dans une application d'emploi) avait les drapeaux requis.
Ce que j'ai réalisé, c'est que le validateur tirait sur l'injecté plus vite que le document n'était prêt, donc il s'est plaint.
Ma balise ng-required d'origine utilisait la balise de visibilité (vm.flags.hasHighSchool).
J'ai résolu en créant un indicateur dédié pour définir la condition requise ng-required = "vm.flags.highSchoolRequired == true"
J'ai ajouté un rappel de 10 ms sur la définition de cet indicateur et le problème a été résolu.
Html:
la source
Assurez-vous que tous les contrôles de votre formulaire avec l'attribut requis ont également l'attribut name défini
la source
Cette erreur m'est arrivée car je soumettais un formulaire avec des champs obligatoires qui n'étaient pas remplis.
L'erreur a été produite parce que le navigateur essayait de se concentrer sur les champs obligatoires pour avertir l'utilisateur que les champs étaient obligatoires mais ces champs obligatoires étaient masqués dans un affichage aucune div donc le navigateur ne pouvait pas se concentrer sur eux. Je soumettais à partir d'un onglet visible et les champs obligatoires étaient dans un onglet caché, d'où l'erreur.
Pour résoudre ce problème, assurez-vous de contrôler que les champs obligatoires sont remplis.
la source
C'est parce qu'il y a une entrée cachée avec l'attribut requis dans le formulaire.
Dans mon cas, j'avais une boîte de sélection et elle est cachée par le tokenizer jquery utilisant le style en ligne. Si je ne sélectionne aucun jeton, le navigateur renvoie l'erreur ci-dessus lors de la soumission du formulaire.
Donc, je l'ai corrigé en utilisant la technique css ci-dessous:
la source
J'ai reçu la même erreur lors du clonage d'un élément HTML à utiliser dans un formulaire.
(J'ai un formulaire partiellement complet, qui contient un modèle, puis le modèle est modifié)
L'erreur faisait référence au champ d'origine et non à la version clonée.
Je n'ai trouvé aucune méthode qui forcerait le formulaire à se réévaluer (dans l'espoir qu'il se débarrasse de toute référence aux anciens champs qui n'existent plus) avant d'exécuter la validation.
Afin de contourner ce problème, j'ai supprimé l'attribut requis de l'élément d'origine et l'ai ajouté dynamiquement au champ cloné avant de l'injecter dans le formulaire. Le formulaire valide désormais correctement les champs clonés et modifiés.
la source