Vérification questionnaire CheckBox

Signaler
Messages postés
6
Date d'inscription
lundi 26 juin 2006
Statut
Membre
Dernière intervention
6 juin 2007
-
Messages postés
6
Date d'inscription
lundi 26 juin 2006
Statut
Membre
Dernière intervention
6 juin 2007
-
Bonjour,

Je suis en train de créer un site dans lequel j'ai un questionnaire assez long avec a chaque ligne une affirmation et en face, 5 checkbox. (coresspondant à une note de 0 à 5)

Les affirmations sont regroupées en bloc de 3, et chaque checkbox a un nom comme ca : Bloc1Ligne3Colonne2
Bloc coresspond au numéro du Bloc, Ligne au numéro de la ligne dans le bloc, et Colonne à la position de la chackbox sur la ligne.

Voila le code d'un bloc :
<form name="Questionnaire" id="Questionnaire" method="post" action="" onsubmit="return validateForm(this)">
Questionnaire

<fieldset id="Bloc"><label for="Bloc1Ligne1">1) Affirmation 1</label>

<label for="Bloc1Ligne2">2) Affirmation 2</label>

<label for="Bloc1Ligne3">3) Affirmation 3</label>

</fieldset>



La fonction "changer(arg1,arg2,arg3)" sert à faire respecter une règle dans les réponses en désactivant certaines checkbox : il ne doit y avoir une seule réponse par ligne et pas deux réponses dans la meme colonne au sein d'un meme bloc.

Pour cette raison, je ne peux malheureusement pas utiliser de bouton radio...


Et voila mon problème : Je n'arrive pas à contrôler que l'utilisateur a bien répondu à toutes les affirmations (donc qu'il y a bien une case cochée par ligne)

J'ai créé une fontion JavaScript que j'appelle au moment de la validation mais elle ne marche pas alors que normalement elle est correcte, du moins au niveau algorithmique.

Voila la fonction :
function validateForm(form)
{
var Bloc = 1 ;
var Ligne = 1 ;
var Colonne = 1 ;

var test = true ;

var IDCase ;

while ( Bloc <28 && test true)
{
while ( Ligne <3 && test true)
{
IDCase1 = "Bloc"+Bloc+"Ligne"+Ligne+"Colonne1" ;
IDCase2 = "Bloc"+Bloc+"Ligne"+Ligne+"Colonne2" ;
IDCase3 = "Bloc"+Bloc+"Ligne"+Ligne+"Colonne3" ;
IDCase4 = "Bloc"+Bloc+"Ligne"+Ligne+"Colonne4" ;
IDCase5 = "Bloc"+Bloc+"Ligne"+Ligne+"Colonne5" ;

if ( ! this.form.element[IDCase1].checked && ! this.form.[IDCase2].checked && ! this.form.[IDCase3].checked && ! this.form.[IDCase4].checked && ! this.form.[IDCase5].checked && )
{
test = false ;
}

Ligne++ ;
}
Bloc++ ;
}

if ( test )
{
return true ;
}
else
{
return false ;
}

}


Voila mon problème !

Je ne suis pas un pro du JavaScript, et je ne suis pas sur de la syntaxe pour vérifier qu'une case est cochée et encore moins que l'on puisse utiliser une variable de type chaine au milieu de cette fonction...

Merci d'avance pour votre aide !!

</form>

11 réponses

Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
32
Bonjour,

c'est totalement illisible.
un effort de mise en page serait le bien venu.

    malgré tout j'ai vu this.form.[IDCase2].checked
    this ? c'est l'objet sur leque on est. donc ici, la fonction....
    document.getElementById(IDCase2) irait mieux.
    san préjuger du reste !






<hr />



Cordialement            Bul     [mon Site]     [M'écrire]



<hr />
Messages postés
414
Date d'inscription
lundi 19 juillet 2004
Statut
Membre
Dernière intervention
23 septembre 2014

Félicitation Bultez, tu as réussi à déchiffrer quelque-chose là-dedans

Outre les remarques déjà faites, je crois avoir vu que tu passais le formulaire en paramètre à la fonction :
    - Evite des nom de variables tels que form (pouvant être confondu avec autre chose)-->function validateForm(formulaire)
    - Ayant passé le formulaire en paramètre, pourquoi s'embéter avec this.form. Remplace ça par le nom de ton paramètre.
This.form, c'est bien quand tu appelles la fonction pour lui passer le formulaire
Messages postés
6
Date d'inscription
lundi 26 juin 2006
Statut
Membre
Dernière intervention
6 juin 2007

Je suis désolé, mais j'avais pourtant mis tous les retours à la lignes, mais ils ne se sont pas affichés....
Et je n'ai pas non plus trouvé comment éditer le post...
Messages postés
414
Date d'inscription
lundi 19 juillet 2004
Statut
Membre
Dernière intervention
23 septembre 2014

Pas grave
Pour ce qui est d'éditer, ce n'est pas possible, je sais plus exactement pourquoi (ya plein de discussions à ce sujet).
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
32
chapeau Ov3rdoze : tu as réussi à déchiffrer quelque-chose là-dedans


>>Evite des nom de variables tels que form
    Ov3rdoze++

>>j'avais pourtant mis tous les retours à la lignes
    copier/coller de la source avec un éditeur de texte,
        pas depuis un  générateur, une page html...

>>je n'ai pas non plus trouvé comment éditer le
post...
    on ne peux pas.
    peut-être sera-ce possible ( dans une prochaine version du site ? selon
    certaines discussions, mais rien  n'est moins sûr, les responsables du
    site n'avaient pas réellement répondu je crois ! ) tant qu'il n'y aura  pas
    eu de réponses ? ce n'est pas le cas ici.



<hr />



Cordialement                Bul     [mon Site]     [M'écrire]



<hr />
Messages postés
6
Date d'inscription
lundi 26 juin 2006
Statut
Membre
Dernière intervention
6 juin 2007

Pour résumer :
\n
J'ai un formulaire avec des checkbox avec des id du type "Bloc1Ligne2Colonne4"
\n
J'ai une fonction JS dans un fichier externe pour controler les box cochées
\n
Il me faudrait la méthode pour passer toutes les checkbox en revue dans une boucle, donc pouvoir écrire l'id de la checkbox dans une variable (ou autre) et vérifier si elle sont cochées.
\n
Pour la variable "form" j'utilise ca ailleur et ca pose pas de problème, mais avec un autre nom c'est pareil...
\n
Ma question : Quelle est la syntaxe pour vérifier ca (avec une fonction placée dans un fichier externe) ?
\n
Merci, et merci pour vos effort de compréhension... (j'éspère que cette fois les retours à la ligne seront effectif...) :-(
Messages postés
6
Date d'inscription
lundi 26 juin 2006
Statut
Membre
Dernière intervention
6 juin 2007

OK, j'ai saisi, en utilisant la textbox "classique" pour écrire un message ca marche mieux !
Messages postés
414
Date d'inscription
lundi 19 juillet 2004
Statut
Membre
Dernière intervention
23 septembre 2014

Je serai tenté de te dire d'imbriquer plusieurs boucles

for (i = 1, i<=NombreDeBlocks, i++) {
    for (j = 1, j<=NombreDeLignesParBlock, j++) {
        for (k = 1, k<=NombreDeColonnesParLigne, k++) {
            ...
        }
    }
}

mais ça devient vite lourd en terme de traitement.

Ensuite tu peux faire un truc du style document.getElementById("Block" + i + "Ligne" + j + "Colonne" + k) pour accéder à une checkbox.
Messages postés
6
Date d'inscription
lundi 26 juin 2006
Statut
Membre
Dernière intervention
6 juin 2007

Avec 420 checkbox a tester, je ne vois pas d'autre solution que les boucles imbriquées. (5 box par lignes, 84 lignes...)
C'est comme ca que je l'imaginais !

Par contre, avec document.getElementById("Block" + i + "Ligne" + j + "Colonne" + k), comment je sais si elle est cochée ou pas ?
en faisant document.getElementById("Block" + i + "Ligne" + j + "Colonne" + k).checked == true ?
Messages postés
414
Date d'inscription
lundi 19 juillet 2004
Statut
Membre
Dernière intervention
23 septembre 2014

Voila quelque chose dans ce genre. Je sais plus si checked reçoit un booléen ou une chaine ("checked" ou "" selon l'état)
Messages postés
6
Date d'inscription
lundi 26 juin 2006
Statut
Membre
Dernière intervention
6 juin 2007

C'est bon j'ai réussi a tester mes checkbox !!

Plus qu'a debugger pour qu'il passe toutes les box en revue et ca sera parfait !


Merci beaucoup pour votre aide !