Déclarer un tableau ?

Résolu
jdeheyn Messages postés 23 Date d'inscription vendredi 14 avril 2006 Statut Membre Dernière intervention 14 janvier 2010 - 11 oct. 2007 à 11:51
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 - 13 oct. 2007 à 09:30
Bonjour,
J'utilise un script trouvé sur ce site pour vérifier en JavaScript si des cases sont cochées dans un formulaire (http://www.javascriptfr.com/codes/CONTROLER-NOMBRE-CHECKBOX-CLIQUEES_22913.aspx).
Ce formulaire est généré automatiquement par un script PHP.
Si dans ce formulaire j'ai plusieurs cases à cocher, le script fonctionne correctement.
Par contre, si je n'ai qu'une seule case à cocher, lorsque je la coche, j'ai ce message d'erreur :

'document.form.list_check[...].checked' a la valeur Null ou n'est pas un objet.

et le script ne semble pas détecter que j'ai cocher la case.
Je ne comprends pas ce qui génère cette erreur.
Voici le contenu de ma page :

<HTML>

<HEAD><META HTTP-EQUIV"Content-Type" CONTENT"text/html; charset= windows-1252">
<TITLE></TITLE>
<script language ="javascript">
<!--

//nb max de choix possible
varnbre_max
= 1;

var nbre
= 0;

varstr
= ''
;

var url
=
new
Array(nbre_max
+1);

functioncheckbox
(num
){

if((document
.form
.list_check
[num
].checked
)= = true ){
nbre
++;
document
.getElementById
( 'cadre_infos'
).innerHTML
='Tu as coch? '
+nbre
+' cases.
'
;
}
else {
nbre
--;
document
.getElementById
('cadre_infos'
).innerHTML
= 'Tu as coch? '
+nbre
+' cases.
'
;
}

if (nbre
>nbre_max
){
document
.getElementById
('cadre_infos'
).innerHTML
='Tu as coch? '
+nbre+' cases.
Si tu valides maintenant rien ne sera comptabilis?.
';
}

if(nbre
= =1){
document
.getElementById
( 'cadre_infos'
).innerHTML
=<italique>'Tu as coch? 1 case.
'
;
}

if(nbre
= =0){
document
.getElementById
( 'cadre_infos'
).innerHTML
='Tu n\'as pas encore coch? de case.
Si tu valides maintenant rien sera comptabilis?.
'
;
}
}

functionverif
(){

for(y
= 0; y
<document
.form
.list_check
.length
;y
++){

if(document
.form
.list_check
[y
].checked
==
true ){
str
=str
+ "&a[]= "
+ y
;
}
}
str
=str
.substring
(1,str
.length
);
document
.form
.action
= "etape_suivante.php?"
+ str
;
document
.form
.submit
();
}

//-->
</script>

</HEAD>


Choix :
S?lectionner 1 case dans la liste ci-dessous, puis cliquer sur 'suivant' :

<FORM METHOD ="POST" NAME= "form" onsubmit ="return
false">


----

Case 1,
(0)">,



()<gras>">

</FORM>
NAME"cadre_infos" ID"cadre_infos">Tu n'as pas encore coch? de case.
Si tu valides maintenant rien ne sera comptabilis?.

<gras>

</HTML>

Y aurait-il une variable à déclarer ou initialiser ?

Merci d'avance pour vos infos et remarques.
Cordialement.
Jérôme

5 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
11 oct. 2007 à 12:34
Bonjour,

    document.form.list_check[num] n'est permis que s'il y a plusieurs checkbox.

    tester ?
        var tmp=document.frm.list_check.length;
        if (tmp) alert("plusieurs"); else alert("un seul");

       si un seul ne tester que
document.form.list_check.checked
       s'il y en a plusieurs on peut "boucler"

       peut-être serait-il plus simple de générer un "checkbox
          bidon", qu'on ne testerait pas, pour qu'il y en est toujours plusieurs







<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
<hr />
3
jdeheyn Messages postés 23 Date d'inscription vendredi 14 avril 2006 Statut Membre Dernière intervention 14 janvier 2010
11 oct. 2007 à 15:47
J'ai pris la solution du 'checkbox bidon' cachée.
Mon nouveau code devient donc :

<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1252">
<TITLE></TITLE>
<script language="javascript">
<!--
//nb max de choix possible
varnbre_max=1;
varnbre=0;
varstr='';
varurl=newArray(nbre_max+1);
functioncheckbox(num){
if((document.form.list_check[num].checked)==true){
nbre++;
document.getElementById('cadre_infos').innerHTML='Tu as coché '+nbre+' cases.
';
} else {
nbre--;
document.getElementById('cadre_infos').innerHTML='Tu as coché '+nbre+' cases.
';
}
if(nbre>nbre_max){
document.getElementById('cadre_infos').innerHTML='Tu as coché '+nbre+' cases.
Si tu valides maintenant rien ne sera comptabilisé.
';
}
if(nbre==1){
document.getElementById('cadre_infos').innerHTML='Tu as coché 1 case.
';
}
if(nbre==0){
document.getElementById('cadre_infos').innerHTML='Tu n\'as pas encore coché de case.
Si tu valides maintenant rien sera comptabilisé.
';
}
}
functionverif(){
for(y=0;y<document.form.list_check.length;y++){
if(document.form.list_check[y].checked==true){
str=str+"&a[]="+y;
}
}
str=str.substring(1,str.length);
document.form.action="etape_suivante.php?"+str;
document.form.submit();
}
//-->
</script>
</HEAD>


Choix :
Sélectionner 1 case dans la liste ci-dessous, puis cliquer sur 'suivant' :


<FORM METHOD="POST" NAME="form" onsubmit="returnfalse">
Case 1,

</FORM>



Tu n'as pas encore coché de case.
Si tu valides maintenant rien ne sera comptabilisé.



</HTML>
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
11 oct. 2007 à 16:05
>>j'ai pris la solution du 'checkbox bidon' cachée.
j'aurais probablement fait la même chose...
    en attendant une solution meilleure ?   ;o))


<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
<hr />
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
12 oct. 2007 à 18:35
Bonjour,

Un approche serait de parcourir les éléments de la FORM à la recherche des INPUTs, dans ce cas tu auras un tableau d'objet, ensuite tu parcours et si  type == "CHECKBOX" alors tu peux tester.

je sentirais bien un truc du style
function checkbox(num){
nbre =0;
var T_Input = document.form.getElementsByTagName('INPUT')
for( var i=0; i< T_Input.length; i++)
  if( T_Input[i].type == "checkbox")
    if( T_Input[i].checked)
      nbre++;
// puis la suite...



;0)
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
13 oct. 2007 à 09:30
ou de mettre un ID,  
   
list_check0"...>

<gras>    list_check1"...>
    ...
et de jouer avec :
    n=0;
    while ( document.getElementById("list_check"+n) )
    {   traitement...
         n++;
    }

il doit bien y avoir d'autres possibilités !

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]<hr />
0
Rejoignez-nous