Lier une liste déroulante à une liste de checkbox

Signaler
Messages postés
17
Date d'inscription
vendredi 10 avril 2009
Statut
Membre
Dernière intervention
8 avril 2010
-
Messages postés
17
Date d'inscription
vendredi 10 avril 2009
Statut
Membre
Dernière intervention
8 avril 2010
-
Bonjour,
Après avoir chercher longtemps chez notre ami google sans trouver de piste je remets entre vos mains mon soucis espérant que quelqu'un y jette un coup d'oeil et me donne une solution.
j'ai crée une liste déroulante avec différentes valeurs, j'obtiens une liste de checkbox differentes pour chaque valeur. J'ai rajouté une fonction javascript qui compte le nombre de cases cochées. et le mets dans un champ texte dont la valeur sera stocké dans la base. Jusque là ça marche.
Mais le souci c'est quand je mets tt ca dans mon application.Quand je change de valeur dans la liste déroulante et puis je décide de retourner vers la liste de checkbox où j'ai dejà coché des cases. je ne trouve rien.Toutes les cases sont à nouveau décoché. Ce qui normal parce que dans le code je lui demande de ramener la mm liste de checkbox que celle du début. Mais ce que je veux c'est qu'il garde les cases que j'ai cochés visibles. Meme après la sauvgarde du formulaire ou le raffraichissement de la page. (on saura qu'on a coché deux cases par exemple mais on saura pas lesquelles).voilà mon code:
<script>

function selectbasic(option)
{
switch(option.options[option.selectedIndex].value){
case "1":document.getElementById('div-cause').innerHTML = 'undeuxtroisquatrecinq   ';
break;
case "2":document.getElementById('div-cause').innerHTML = '123   ';
break;
default:document.getElementById('div-cause').innerHTML = '';break;
}
}
var compteur1 = 0;
var compteur2 = 0;
function inc_decr1(val_input) {

if (val_input) {

compteur1++;
}else{
compteur1--;
}
if (compteur1<=0) {
document.getElementById('pertinence').value = "Aucune case cochée/Pertinence est égale à 0";
}else{
document.getElementById('pertinence').value = compteur1 + " case(s) cochée(s)"+"la pertinence est égale à : "+(compteur1/5);
}
}
function inc_decr2(val_input) {

if (val_input) {

compteur2++;
}else{
compteur2--;
}
if (compteur2<=0) {
document.getElementById('pertinence').value = "Aucune case cochée/Pertinence est égale à 0";
}else{
document.getElementById('pertinence').value = compteur2 + " case(s) cochée(s)"+"la pertinence est égale à : "+(compteur2/3);
}
}
</script>

et le formulaire:
<tr>
  	<td width="30%">
      
Type 

    </td>
    <td >
    	<select class="inputbox" name="type" onchange="selectbasic(this);">
    	<option value="">-</option>
     	<option value="1">1</option>
<option value="2">2</option>
    	</select>
    

<!-- je veux récupèrer une liste de case à cocher dans  un champ caché -->


  
    </td>
  </tr>

Ca fait une semaine que je cherche et je ne trouve pas. je débute en javascript si qlq peut m'aider. Merci bcp

11 réponses

Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
Bonjour,

le problème n'est vraisemblablement pas
du au javascript.
vous parlez de mettre à jour votre base de données,
donc un formulaire est envoyé vers le serveur
qui recréera la page je suppose
donc tout est réinitialisé.
il faut donc lui dire de
"remettre" les cases cochées
en php par exemple :

if (isset($_post['c1']) $s='checked="checked"';
else $s='';
/>

et|ou pour|sur les option si nécessaire


Cordialement [mon Site] [M'écrire] Bul
Messages postés
17
Date d'inscription
vendredi 10 avril 2009
Statut
Membre
Dernière intervention
8 avril 2010

Merci pour ton aide mais j'ai pas réussir à faire marcher ce que tu m'a proposé par contre j'ai modifié le code et maintenant mon problème est résolu à moitié. En fait j'ai crée pour chaque valeur de la liste un div différent contenant une liste de checkbox différente.
la fonction javascript:
function selectbasic(option)
{
switch(option.options[option.selectedIndex].value){
case "2":document.getElementById('div-cause1').style.display='';document.getElementById('div-cause2').style.display='none';document.getElementById('div-cause3').style.display='none';document.getElementById('div-cause4').style.display='none';
break;
case "3":document.getElementById('div-cause2').style.display='';document.getElementById('div-cause1').style.display='none';document.getElementById('div-cause3').style.display='none';document.getElementById('div-cause4').style.display='none'; 
break;
case "4":document.getElementById('div-cause3').style.display='';document.getElementById('div-cause2').style.display='none';document.getElementById('div-cause1').style.display='none';document.getElementById('div-cause4').style.display='none';
break;
default:document.getElementById('div-cause4').style.display='';document.getElementById('div-cause1').style.display='none';document.getElementById('div-cause3').style.display='none';document.getElementById('div-cause2').style.display='none';
break;
}
}


le formulaire html:
<tr>
  	<td width="30%">
      
Type 

    </td>
    <td >
    	<select class="inputbox" name="type" onchange="selectbasic(this);">
    	<option value="">-</option>
     	<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
    	</select>
    


12345


111213


21222324


Ben y a rien hi hi

</td>

  </tr>


le soucis maintenant c'est quand je sauvegarde mon formulaire, quand je veux aller vers la liste de checkbox que j'ai coché. Les cases que j'ai coché ne sont plus visibles.
Svp si quelqu'un veut bien me filer un coup de main. comment pourrais je sauvegarder les données de mon div pour l'appeler après la sauvegarde?
Messages postés
9
Date d'inscription
jeudi 13 novembre 2008
Statut
Membre
Dernière intervention
14 août 2009

Salut.

Pour ton probleme de preremplissage il faut que tu le fasse en php.

Je suppose que tu va envoyer ton formulaire a un fichier php pour recuperer les donnees
dans ce cas avec des variables $_SESSION tu peux recuperer a afficher les champs qui avaient ete saisis.
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
vous ne m'avez pas répondu, mais si c'est suite
à l'envoi du formulaire, vous devez le faire
coté serveur.
vous pouvez faire ce que vous voulez coté javascript,
mais part mémoriser dans un cookie l'état, ce qui
serait absurde, pas de moyens

@singulier, même sans $_session ... je pense

if (isset($_post['c1']) $s='checked="checked"';
else $s='';
/>
et|ou pour|sur les option si nécessaire
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
il fallait bien sûr lire
<?php
if (isset($_POST['c1']) $s='checked="checked"';
else $s='';
?>
/>
Messages postés
9
Date d'inscription
jeudi 13 novembre 2008
Statut
Membre
Dernière intervention
14 août 2009

Je suis d'accord avec bul3

Pour le peremplissage il faut le faire en php (c'est plus simple) l'avantage de passer par des variables $_SESSION[] c'est que tes champs seronts prerempli meme apres un rechargement ou pares avoir visite d'autre page(et si tu passe par un script php dans un fichier separer)

voila un formulaire que j'ai fait qui semble correspondre ??
formulaire.
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
singulier à raison

>>après avoir visite d'autre page
si on veut cela, c'est indispensable

>>il faut le faire en php (c'est plus simple)
ce qui est sûr c'est que le langage sur le
le serveur dispose de tout pour le faire
et que gérer cela coté client serait,
au minimum, redondant
Messages postés
17
Date d'inscription
vendredi 10 avril 2009
Statut
Membre
Dernière intervention
8 avril 2010

En fait j'ai pas bouton envoyer dans le formulaire. en fait c'est un formulaire qui vient se greffer dans une application existante(développé à la base du framework joomla). Et donc il n'y a pas le mm mécanisme de post. C'est pour ça que je n'arrive pas à mettre en place ce que vous m'avez proposé
En fait là je veux récupèrer la valeur des cases cochés pour les stocker dans la base. les mettre dans un array. et puis dans mes checkbox mettre une condition en php avec array_in() pour vérifier si la valeur d'un checkbox existe dans le array cela voudrait dire qu'elle a été cochée et me permettrait de l'afficher cochée.
$destinataires=split(";",$array_case);//je veux mettre dans $array_case la valeur des      //cases que j'ai coché

echo "
";
while ($db_u->next_record()) {
?>


<?php $db_u->sp("name") ?>  f("id"); ?>"onClick="inc_decr2(this.checked);" name="__cbu-<?php $db_u->sp("id") ?>" <?php if (in_array($db_u->f("id"),$destinataires)) echo "checked"; ?>/> 


<?php
}
echo "
";

je veux mettre dans $array_case la valeur des cases que j'ai coché comment faire?merci
Messages postés
9
Date d'inscription
jeudi 13 novembre 2008
Statut
Membre
Dernière intervention
14 août 2009

Desolé mais je ne comprend pas bien.

Peux tu faire un lien sur ta page et mettre son code.
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
>>Et donc il n'y a pas le mm mécanisme de post.
mais si mais si

si vous avez un formulaire
mettez des name avec des []
<form metgod="post" ...>
<...type="checkbox" name="chk[]"..../>
<...type="checkbox" name="chk[]"..../>
<...type="checkbox" name="chk[]"..../>

coté php, $_POST['chk'] est un array
Messages postés
17
Date d'inscription
vendredi 10 avril 2009
Statut
Membre
Dernière intervention
8 avril 2010

Salut
Merci pour vos réponses.
Mon problème est réglé. Il y a effectivement un post pour toute la page. Mais pour régler le problème j'ai du créer un div invisible avec mes valeurs à cocher pour chaque valeur de la liste déroulante. je rends ensuite visible le div correspondant à la valeur sélectionné. Puis je parcours la liste des case et je stocke la valeur de chaque case cochée dans un tableau (qui est aussi un champs dans ma table.) Et après l'enregistrement pour afficher à nouveau les cases déjà cochées je lui demande de comparer pour la valeur de chaque case avec les valeurs du tableau avec in_array. Si jamais il trouve une valeur, à l'affichage elle sera cochée.
Maintenant ce que je veux faire c'est compter le nombre de cases cochées. J'ai essayé de faire une fonction javascript que j'ai mis à l'événement onClick et je lui demande de m'afficher le nombre dans un champ texte. Il me renvoie bien le nombres de cases cochées mais une fois que j'enregistre et que je décide de cocher de nouvelles cases il reprends le compte depuis le début. c'est normal c'est un peu ce que je lui demande dans mon code:
var compteur1 = 0;

function inc_decr1(val_input) {

if (val_input) {

compteur1++;

}else{
compteur1--;
}
if (compteur1<=0) {
document.getElementById('pertinence').value = "Pertinence est égale à 0";
}else{
document.getElementById('pertinence').value = "la pertinence est égale à : "+(compteur1/5);
}
}

le champ text où il va afficher le résulat:
f("pertinence") ?>" />


Je veux lui dire de parcourir la liste des cases s'il y a une case cochée il doit la compter avec les nouvelles cases que je vais cocher et si je la décoche il décrémente le compteur.

Merci pour votre aide