[JQUERY]Contrôle de formulaire dynamique

Eléphant du PHP | 226 Messages

02 juil. 2010, 14:04

Bonjour,

J'ai un formulaire généré dynamiquement. Les noms des champs reviennent à
input id="cout[1]" ... input id="cout[2] etc...
J'aimerais toutefois vérifier si au moins l'un des champs n'est pas vide avant l'envoie du formulaire.

Code : Tout sélectionner

if($('input[name^=cout]').val()!=""){ ... } else{ ... };
Je n'obtiens qu'une seule valeur avec ce script. J'ai donc pensé à l'inclure dans une boucle. Mais si condition est exacte, je ne vais pas à chaque itération envoyer le formulaire:

Code : Tout sélectionner

$.post("repart_et_tva/treatmentCompta.php", $("#formCompta").serialize(), function(data){ ... if(data == ""){ $("#content").fadeOut('normal', function(){ ... }
Comment puis-je faire alors ?
merci,
Modifié en dernier par albius le 05 juil. 2010, 17:28, modifié 1 fois.
«Le matin, quand il t’en coûte de te réveiller, que cette pensée te soit présente: c’est pour faire œuvre d’homme que je m’éveille.»
Marc Aurèle.

ViPHP
AB
ViPHP | 5818 Messages

02 juil. 2010, 18:17

Je comprend rien à ton code, c'est une lib ?

Sinon sur le principe tu peux faire

var temoin = false;

boucle : foreach ... { if (champ non vide) temoin = true;}

if temoin = true -> au moins un champ est rempli -> envoi du formulaire.

Eléphant du PHP | 226 Messages

05 juil. 2010, 17:26

Bonjour,

Oui, j'ai oublié de préciser qu'il s'agit de jquery... J'avais également pensé à me servir d'une var témoin, et voici ce que j'ai écris (après modification du premier code)

Code : Tout sélectionner

$(function(){ $("#formCompta").submit(function(){ var temoin = true // On vérifie si au moins un champs a été renseigné $("input[name^='cout']").each(function(i, champs){ if($(champs).val() == ""){ temoin = true; return false; } else{ temoin = false; } }); if(temoin == true){ $("#content").append('not Ok!'); } else{ $("#content").append('it\'s Ok!'); } return false; }); });
Mais ce code ne répond pas précisément à la demande. 3 cas possibles:
Si aucun des champs n'est rempli, j'ai bien 'not ok!' qui apparaît
Si tous les champs sont remplis, 'its ok!'
Mais si l'un des champs n'est pas rempli, c'est 'not ok!' qui est lu. Or, ce n'est pas bon, puisque c'est un champs minimum qui doit être renseigné pour que cela puisse être valable. Et donc le formulaire envoyé.
Il y a quelque chose qui m'échappe encore...
merci,
«Le matin, quand il t’en coûte de te réveiller, que cette pensée te soit présente: c’est pour faire œuvre d’homme que je m’éveille.»
Marc Aurèle.

ViPHP
AB
ViPHP | 5818 Messages

05 juil. 2010, 19:42

Il y a quelque chose qui m'échappe encore...
merci,
Je t'ai donné la (une) bonne méthode pour faire ce que tu demande... Essaies d'abord de la tester avant de faire autre chose qui ne fonctionne pas :roll:
Notamment dans ma boucle, il n'y a pas de else...

Eléphant du PHP | 226 Messages

06 juil. 2010, 16:50

Bonjour,
Notamment dans ma boucle, il n'y a pas de else...
Justement, c'est cela que je ne comprends pas... Pourquoi dès lors que l'on veut intégrer une autre condition, les résultats ne sont plus les mêmes ?
merci,
«Le matin, quand il t’en coûte de te réveiller, que cette pensée te soit présente: c’est pour faire œuvre d’homme que je m’éveille.»
Marc Aurèle.

ViPHP
AB
ViPHP | 5818 Messages

06 juil. 2010, 18:27

Parce que c'est l'algo (la logique du code) qui le demande pour ce que tu veux faire !

La bonne formule est :

Code : Tout sélectionner

var temoin = false; boucle : foreach ... { if (champ non vide) temoin = true;}
Si je fais :

Code : Tout sélectionner

var temoin = false; boucle : foreach ... { if (champ non vide) temoin = true; else temoin = false}
Le premier champ non vide va retourner temoin = true mais si le dernier champ testé dans la boucle est vide alors temoin = false et le résulat ne sera pas bon. Donc dans cet algo il ne faut pas de else. Tu comprends ?

Eléphant du PHP | 226 Messages

07 juil. 2010, 09:14

C'est la conclusion sur laquelle j'avais fini par être arrivé. Merci bien.
«Le matin, quand il t’en coûte de te réveiller, que cette pensée te soit présente: c’est pour faire œuvre d’homme que je m’éveille.»
Marc Aurèle.