Comment boucler depuis un input tableau [Résolu]

Messages postés
70
Date d'inscription
lundi 3 août 2009
Statut
Membre
Dernière intervention
9 juillet 2011
- - Dernière réponse : Bul3
Messages postés
4934
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
- 11 sept. 2009 à 15:59
Bonjour,

J'ai un formulaire avec une boucle php du type :




Comment puis-je vérifier en javascript qu'au moins une cas à été cochée ?

Pour des champs de type id="id[]" j'utilise cette fonction :

function is_selected_box(f,n,libelle) {
var isSel = false;
//recherche si une box a été coché
var arr = f.getElementsByTagName('input');
for(var i = 0; i < arr.length; i++) {
if(arr[i].name == n && arr[i].checked == true) {
isSel = true;
break;
}
}
if(!isSel) {
if(libelle) {
alert(libelle);
} else {
alert('Vous devez séléctionner au moins un élèment');
}
return false;
}
return true;
}


Donc (en js)
comment faire pour savoir si id['.$i.'] existe et comment boucler sur ces champs, sachant que leur nombre peut être variable.

Merci d'avance à ceux qui se pencheront sur mon problème.
Afficher la suite 

9 réponses

Meilleure réponse
Messages postés
70
Date d'inscription
lundi 3 août 2009
Statut
Membre
Dernière intervention
9 juillet 2011
3
Merci
Pour conclure et qui me convient parfaitement :


function is_selected_multi_box(arr_name) {
var n = 0;
var isSel = false;
while(GetId(arr_name+'['+n+']')) {
if(GetId(arr_name+'['+n+']').checked == true) {
isSel = true;
break;
}
n++;
}
return isSel;
}

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 195 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_moumouf
Messages postés
4934
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
7
0
Merci
Bonjour,
je suppose qu'il y a une boucle en php....

donc ça donne :
<form name="frm">




</form>


si j'étais vous, je m'arrangerais plutôt ainsi :


ce qui devrait donner :
<form name="frm" method="post".... >




</form>

coté javascript,

on utilise
for ( var n=0;n<document.frm["chk[]"].length;n++ )
{ tester document.frm["chk[]"][n].checked  }
ou avec les id
var n=0;
while ( document.getElementById("chk"+n) )
{ tester document.getElementById("chk"+n).checked
  n++
}

coté php, $_POST['chk'] et $_POST['my_text']
sont des array, facile à gérer donc

Cordialement [mon Site] [M'écrire] Bul
Commenter la réponse de Bul3
Messages postés
70
Date d'inscription
lundi 3 août 2009
Statut
Membre
Dernière intervention
9 juillet 2011
0
Merci
J'ai déjà pensé faire ca mais le soucis et que je ne récupère la valeur du input que si sa box correspondante est cochée.

imaginons que la box1 est coché, la seconde non et la troisieme oui, si je n'utilise pas d'index dans la boucle je suis incapable de savoir a quel champs input correspond la boxe séléctionnée.

Cependant vous avez ouvert un piste :

var n=0;

while ( document.getElementById("chk[n]) )

{ tester document.getElementById("chk[n]).checked

n++

}
Commenter la réponse de cs_moumouf
Messages postés
4934
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
7
0
Merci
>>je ne récupère la valeur du input que si sa box
>>correspondante est cochée.

euh... n'est transmis au php que les value
des champ qui ont un name
les input texte seront tous transmis,
les checkbox, ceux cochés uniquement
c'est le principe même des échanges
html vers le serveur

vous connaissez le n° du chekbox coché
( mis dans son value ), c'est l'index
de l'input text...
Commenter la réponse de Bul3
Messages postés
4934
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
7
0
Merci
vous recevrez par exemple , coté php :
$_POST['chk'] = 0,3,5
$_POST['my_text'] = "texte 0","texte 1","texte 2","texte 3","texte 4","texte 5","texte 6"
s'il y a 7 champs texte/chekcbox
et si seules les checkbox 0,3 et 5 sont coché
Commenter la réponse de Bul3
Messages postés
70
Date d'inscription
lundi 3 août 2009
Statut
Membre
Dernière intervention
9 juillet 2011
0
Merci
a mon avis, vous n'avez pas bien saisi mon pb

<form name="frm" method="post".... >
"/> // 127

"/> // 480

"/> // 23

</form>

1 les valeurs de box sont les id(SQL) de l'element séléctionné donc inconnus. ca peux etre 127 pour le premier et 480 pour le second puis 23 pour le troisieme.

donc si on coche la premiere et la troisieme
on aura en php un tableau id array(0 => 127, 1 => 23)
et un tableau my_text array(0 => valeur element1, 1 => valeur element2, 2 => valeur element3

Ce qui empêche tout rapprochement.
Commenter la réponse de cs_moumouf
Messages postés
4934
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
7
0
Merci
ah.... en mettant ces "indicatifs" comme ça
on ne peut que difficilement, voire pas du tout gérer,
ajouter un input type=hidden dans lequel
vous mettrez en value ces "ID"


$_POST['chk'] = 0,3,5...
$_POST['my_text'] = "t0","t1","t2","t3","t4","t5","6" ...
$_POST['cache']=127,480,23....
Commenter la réponse de Bul3
Messages postés
70
Date d'inscription
lundi 3 août 2009
Statut
Membre
Dernière intervention
9 juillet 2011
0
Merci
en faisant comme cela c'est possible

puis en php :

foreach($id as $key => $val) {
$my_text[$key];
}

Merci bien pour votre aide !
Commenter la réponse de cs_moumouf
Messages postés
4934
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
7
0
Merci
effectivement, j'ai oublié
les array associatifs !
nickel si ça baigne.
Commenter la réponse de Bul3