Tester l'existance d'une case à cocher

Résolu
Gyome314 Messages postés 125 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 22 janvier 2009 - 1 mars 2006 à 09:41
Gyome314 Messages postés 125 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 22 janvier 2009 - 1 mars 2006 à 16:38
Bonjour

Dans une page, j'ai un script PHP qui génère plusieurs cases à cocher nomées "box1", "box2", "box3", ...

lorsque qu'on valide le formulaire, je veux tester ces boxs, mais je ne connais pas le nombre exacte, je vise au max.


mais lorsque je teste une box qui n'existe pas dans ma boucle, j'ai forcemment une erreur du type "undefined":


for(var i=1; i<30; i++){
if(eval("box"+i+".checked")==true){
[---]
}}

comment faire pour passer au travers ?

merci d'avance

9 réponses

Gyome314 Messages postés 125 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 22 janvier 2009
1 mars 2006 à 15:38
Merci pour vos solutions les gars :)

Le pb avec la solution de Mindiell, c'est que dans la façon dont j'ai fait les choses, les numéros des box ne se suivent pas nécessairement linéairement :
on peut avoir box1, box2, box4,...
Donc le pb reste le meme.

Pour la solution de Bultez, j'ai pas testé, mais je pense que j'aurais eu le même pb...

J'ai trouvé une solution toute bête entre deux : mettre les boxes proprement dans un formulaire... lol

eval("box"+i) provoque une erreur si la boxe n'existe pas...
par contre : eval("document.monformulaire.box"+i) renvoit vrai ou faux en fonction de l'existance de la case...

Pourquoi ? je n'en ai aucune idée, mais comme quoi, quant on fait les choses proprement, tout marche à merveille :)

bon courage, A+
3
Mindiell Messages postés 559 Date d'inscription jeudi 25 juillet 2002 Statut Membre Dernière intervention 5 septembre 2007 1
1 mars 2006 à 12:23
php connait le nombre de cases, stockes ce nombredans une variable phph puis :

for (var i=0;i<<?=$nombrecases?>;i++)
{
...
}
0
cs_bultez Messages postés 13616 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 31
1 mars 2006 à 12:30
Bonjour,
un ch'tit exemple ?

<form name="frm">



</form>
<script type="text/javascript">
var n=1;
while ( frm["box"+n] )
{
alert(frm["box"+n].name+"="+frm["box"+n].checked);
n++;
}
</script>

à mon humble avis, il vaudrait mieux :
° mettre id=box1,box2... et traiter document.getElementById("box"+n).checked
° mettre le même nom, box par exemple et faire
for ( var n=0;n<frm.box.length;n++ )
{
frm.box[n].checked....

une remarque : à if ( quelque chose == true ) je préfère if ( quelque chose )
... mais chacun ses goûts ( et les vaches seront bien gardées ).

Cordialement. Bul. ~ Mon Site qu'il est à Moi ~<FO>
</FO>
</S< body>
0
cs_bultez Messages postés 13616 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 31
1 mars 2006 à 12:35
oh ... croisement avec MinDiell
qui donne une solution tout aussi valable
SI php connait le nombre de postes
( ce qui n'est pas toujours le cas )
donc tout dépend du contexte, comme toujours.
Cordialement. Bul. ~ Mon Site qu'il est à Moi ~<FO>
</FO>
et quand je dis croisement, rien de sexuel là dedans, hein !</S< body>
0

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

Posez votre question
Mindiell Messages postés 559 Date d'inscription jeudi 25 juillet 2002 Statut Membre Dernière intervention 5 septembre 2007 1
1 mars 2006 à 12:41
Coucou,

En même temps, si php les génère, il les connait forcément ;o)

merci pour ta solution Bul, en tout cas ^^
0
Mindiell Messages postés 559 Date d'inscription jeudi 25 juillet 2002 Statut Membre Dernière intervention 5 septembre 2007 1
1 mars 2006 à 15:51
euh, tu peux nous donner ta partie php qui met les box, histoire que je comprenne pourquoi ma solution serait pas bonne ? :o)
0
cs_bultez Messages postés 13616 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 31
1 mars 2006 à 16:00
si box# est dans un formulaire, il est nécessaire de
le dire : name_formulaire.name_box.? et aps name_box.?
sinon : inconnu.

quelle idée de générer des name/id non consécutifs ?

on pourrait aussi examiner tous les champs du formulaire
et traiter ceux qui sont des checkbox.
car eval, c'est assez gourmand, et tester si les champ existent,
je veux bien, mais on arrête quand ? avec une borne maxi ?
je n'aime pas trop moi, car si le nombre augmente, il faudra modifier
le script ( si on s'en souvient qu'il existe et est testé ce maxi ! )

Cordialement. Bul. ~ Mon Site qu'il est à Moi ~<FO>
</FO>
</S< body>
0
Mindiell Messages postés 559 Date d'inscription jeudi 25 juillet 2002 Statut Membre Dernière intervention 5 septembre 2007 1
1 mars 2006 à 16:03
les id des box non consecutifs sont peut-etre liés à un truc spécial. Par exemple :

Choisissez la couleur de votre voiture :
- 1 jaune
- 2 vert
- 4 bleu

car la couleur 3 noir n'est pas accessible pour ce modèle...


PS: non, je n'ai pas mauvais gout pour les couleurs de voiture :oP
0
Gyome314 Messages postés 125 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 22 janvier 2009
1 mars 2006 à 16:38
En fait ma liste des boxes est liés à une liste stockée dans une BDD

Cette liste peut être gérée par les admins du site, pour ajouter de nouvelle case ou en supprimer d'autre...

de plus dans nom name="boxnum", num correspond à l'identifiant du champ dans ma BDD, ensuite, je fais une recherche sur les noms de boites validées pour savoir quels identifiants enregistrés (parceque je me sert du champ value pour tout autre chose).

Je sais pas si j'ai été clair, mais bon. c'est fait et ca marche impecc, c tout ce qui m'importe

Merci les jeunes ;)
A+
0