Validation non bloquante d'un champ d'upload

Champ pas obligatoire, mais si le fichier est trop gros, il est considéré comme devant être rempli

Le problème exposé dans ce sujet a été résolu.

Bonjour à tous !

Ces temps, je joue avec un site développé avec Yii framework 2. Et j’ai un comportement un peu gênant avec la validation client des formulaires proposée par ActiveForm.

Les utilisateurs ont la possibilité de se choisir un avatar, mais ce n’est pas obligatoire. Afin d’éviter du traitement inutile sur le serveur et l’upload d’images en je-ne-sais-combien-de-K de résolution quand on affiche au maximum du 120x120, on vérifie la taille de l’image et ses dimensions.

Seulement, il se trouve que si l’utilisateur choisit une image qui ne sera pas acceptée, on a bien le message d’erreur, mais le formulaire ne peut pas être soumis parce qu’il y a une erreur.

Comment rendre cette erreur — qui est correctement signalée — sans que ça ne force à renseigner un champ qui peut pourtant être vide ?

Merci d’avance

+0 -0

Salut !

Je ne connais pas ce framework, mais si ça se passe comme CodeIgniter, tu doit certainement ajouter une règle sur chaque champs du style &form->validate(’avatar’, ’rule1, rule2’); non ?

Si c’est le cas, tu pourrais vérifier si le champs avatar est vide avant d’appliquer cette règle.

Ainsi il sera facultatif. ;)

+0 -0

Le hic, c’est qu’actuellement le champ n’est pas vide pour que la règle soit appliquée : la validation survient à la soumission du formulaire, il faut donc que le champ soit rempli… Et si le champ est rempli avec de mauvaises données, ça bloque.

Mais j’ai vu passer qu’il y avait moyen de spécifier pour qu’un champ soit validé quand son contenu est changé. J’espère juste que si on ne choisit rien dans un champ de type file, le message d’erreur va disparaître et débloquer la situation (et ce quel que soit le moment où elle est effectuée).

Edit

Ben en fait, il n’y a pas d’autre moyen que par programmation pour "vider" un champ file avec Firefox (qui reste à prendre en compte vu sa popularité), il n’est pas possible de cliquer dessus et ne rien choisir. Donc je vais probablement utiliser la validation avec onChange et ajouter un petit bouton pour effacer le choix — en espérant que ce ne soit pas fait automatiquement par la validation, sans quoi ce sera un changement qui risque de passer inaperçu pour le script de validation.

Edit 2

Au final, j’ai mis un écouteur sur l’événement afterValidateAttribute qui, s’il y a une erreur pour le champ incriminé, fait s’afficher de quoi vider la valeur du champ. La validation sur onChange aidant, il suffit de déclencher l’évènement pour faire disparaître le message, et donc rendre l’erreur non bloquante.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte