Déclarer un tableau ?

[Résolu]
Signaler
Messages postés
23
Date d'inscription
vendredi 14 avril 2006
Statut
Membre
Dernière intervention
14 janvier 2010
-
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
-
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

Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
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 />
Messages postés
23
Date d'inscription
vendredi 14 avril 2006
Statut
Membre
Dernière intervention
14 janvier 2010

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>
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
>>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 />
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
18
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)
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
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 />