[JS] Connaître la valeur d'une checkbox

Connaître la valeur d'une checkbox [JS] - HTML/CSS - Programmation

Marsh Posté le 12-11-2008 à 15:51:37    

Bonjour,  
 
J'ai un formulaire avec une liste de cases (extraction de la bdd), toutes cochées par défaut. En cliquant sur un bouton, une popup s'ouvre, et fait un récap des cases cochées, avant de les insérer en base.
 
Le problème : sur ma liste de x cases, j'en décoche quelques unes, mais sur la popup, elles apparaissent en état 'coché'. Logique puisque c'est l'état de chargement de la page mère. Mais je ne parviens pas à connaître leur état au moment du clic sur le bouton.
 
Voilà mon code (simplifié) pour les cases :

Code :
  1. <?php
  2. $CodeHtml[1] = '<input name="prg[]" value="TAB0" checked="checked" type="checkbox">TAB0<br><input name="prg[]" value="TAB1" checked="checked" type="checkbox">TAB1<br><input name="prg[]" value="TAB2" checked="checked" type="checkbox">TAB2<br><input name="prg[]" value="TAB3" checked="checked" type="checkbox">TAB3<br><input name="prg[]" value="TAB4" checked="checked" type="checkbox">TAB4<br>';
  3. ?>
  4. <input type="hidden" id="CasesNb" value="<?php echo $CodeHtml[0]; ?>" />
  5. <input type="hidden" id="CasesListe" value="<?php echo htmlentities($CodeHtml[1]); ?>" />
  6. <input type="button" name="CreateList" value ="Créer une liste" onClick="CreateList();" />


 
Code du traitement JS (appelé par la fonction CreateList() du bouton) :

Code :
  1. [...]
  2. <head>
  3. <script language="JavaScript" type="text/javascript">
  4. function AffRef() {
  5. var CasesNb = window.opener.document.getElementById('CasesNb').value;
  6. var CasesListe = window.opener.document.getElementById('CasesListe').value;
  7. // Liste des programmes sélectionnés
  8. document.write("Liste des programmes sélectionnés : <br />" );
  9. document.write("<div style=\"background-color : #FFFFE0; height:180px; overflow : auto;\">" );
  10. // on boucle sur toute la liste de programmes
  11. for ( cpt = 0; cpt < CasesNb; cpt++ )
  12. var explode = function(str, sep) { return str.split(sep); }
  13. var CasesListeTab = explode(CasesListe, '<br>'); // on sépare chaque ligne du tableau
  14. var pattern = 'checked="checked"';
  15. document.write("Affichage n°" + cpt + " : " + CasesListeTab[cpt] + "<br>" );
  16. if( CasesListeTab[cpt].indexOf(pattern) != -1 ) {
  17. document.write(cpt + " est coché<br />" );
  18. } else document.write(cpt + " n'est pas coché<br />" );
  19. }
  20. document.write("</div>" );
  21. }
  22. </script>
  23. </head>
  24. <body>
  25. <script language="JavaScript" type="text/javascript">
  26. AffRef();
  27. </script>


 
(désolé je ne parviens pas à recréer l'indentation...)
 
Existe-t-il une fonction qui "capture" la valeur des cases cochées au moment du clic sur le bouton, et pas au chargement initial de la page ? Merci d'avance pour votre aide !

Reply

Marsh Posté le 12-11-2008 à 15:51:37   

Reply

Marsh Posté le 12-11-2008 à 17:37:51    

Oulala, ton code refoule méchamment la bidouille maintenue à coup de béquilles et de rustines, qui va s'écrouler au moindre coup de vent (ouais, chuis dur là, mais ça percute mieux comme ça).
 
Franchement mettre du HTML dans un champ input.hidden pour parser après ça en javascript, il y un peu plus simple, même avec une archie complètement pourrie derrière.
 
Par exemple :

Code :
  1. // Récupère une référence de l'élément englobant tes checkbox
  2. var div = window.parent.document.getElementById("mescheckbox" )
  3.  
  4. // Récupère tous les "input" qu'il y a dedans
  5. var cbs = div.getElementsByTagName("input" )
  6.  
  7. // Vérifié l'état des checkbox
  8. for (var i in cbs)
  9. {
  10.    if (cbs[i].type == "checkbox" )
  11.        alert("Checkbox " + cbs[i].name + ": " + cbs[i].checked)
  12. }


Reply

Marsh Posté le 12-11-2008 à 18:18:40    

Ouaip j'en suis conscient, mais je reprend le projet, j'ai déjà du mal à m'y retrouver donc je n'ai pas le temps de tout remettre à plat :)
 
Je teste ton code demain matin, merci !

Reply

Marsh Posté le 13-11-2008 à 08:28:58    

Bonjour,  
 
Je ne comprend pas l'élément englobant les checkbox ("mescheckbox" ) : est-ce que c'est le nom du formulaire ? Un div class à ajouter ?

Reply

Marsh Posté le 13-11-2008 à 16:16:08    

N'importe quelle balise qui englobe tes <input type="checkbox">, à la limite la balise body (mais là tu vas vraiment tout avoir).

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed