Vérification questionnaire CheckBox

sushiw Messages postés 6 Date d'inscription lundi 26 juin 2006 Statut Membre Dernière intervention 6 juin 2007 - 5 juin 2007 à 19:53
sushiw Messages postés 6 Date d'inscription lundi 26 juin 2006 Statut Membre Dernière intervention 6 juin 2007 - 6 juin 2007 à 11:26
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

cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
6 juin 2007 à 06:00
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 />
0
cs_ov3rdoze Messages postés 414 Date d'inscription lundi 19 juillet 2004 Statut Membre Dernière intervention 23 septembre 2014
6 juin 2007 à 09:10
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
0
sushiw Messages postés 6 Date d'inscription lundi 26 juin 2006 Statut Membre Dernière intervention 6 juin 2007
6 juin 2007 à 09:15
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...
0
cs_ov3rdoze Messages postés 414 Date d'inscription lundi 19 juillet 2004 Statut Membre Dernière intervention 23 septembre 2014
6 juin 2007 à 09:20
Pas grave
Pour ce qui est d'éditer, ce n'est pas possible, je sais plus exactement pourquoi (ya plein de discussions à ce sujet).
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
6 juin 2007 à 09:35
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 />
0
sushiw Messages postés 6 Date d'inscription lundi 26 juin 2006 Statut Membre Dernière intervention 6 juin 2007
6 juin 2007 à 09:59
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...) :-(
0
sushiw Messages postés 6 Date d'inscription lundi 26 juin 2006 Statut Membre Dernière intervention 6 juin 2007
6 juin 2007 à 10:01
OK, j'ai saisi, en utilisant la textbox "classique" pour écrire un message ca marche mieux !
0
cs_ov3rdoze Messages postés 414 Date d'inscription lundi 19 juillet 2004 Statut Membre Dernière intervention 23 septembre 2014
6 juin 2007 à 10:15
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.
0
sushiw Messages postés 6 Date d'inscription lundi 26 juin 2006 Statut Membre Dernière intervention 6 juin 2007
6 juin 2007 à 10:26
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 ?
0
cs_ov3rdoze Messages postés 414 Date d'inscription lundi 19 juillet 2004 Statut Membre Dernière intervention 23 septembre 2014
6 juin 2007 à 10:32
Voila quelque chose dans ce genre. Je sais plus si checked reçoit un booléen ou une chaine ("checked" ou "" selon l'état)
0
sushiw Messages postés 6 Date d'inscription lundi 26 juin 2006 Statut Membre Dernière intervention 6 juin 2007
6 juin 2007 à 11:26
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 !
0
Rejoignez-nous