[jQuery] Récupérer checkbox dans une fonction

Résolu/Fermé
Vodkadaaa Messages postés 13 Date d'inscription vendredi 30 octobre 2009 Statut Membre Dernière intervention 8 novembre 2009 - 30 oct. 2009 à 18:31
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 - 25 janv. 2011 à 16:45
Bonsoir,

J'ai un formulaire en php. Ce formulaire contient des checkbox dont j'aimerai récupérer la valeur dans une fonction Ajax. J'y suis depuis hier soir dessus et je n'arrive toujours pas a récupérer ces valeurs.

voici mon php transformé en html (juste la partie qui nous intéresse) :

<form id='form_affectation' onsubmit='affecter(4); vider_div("tableau_logiciels_salles"); return false;'>
    <input type=checkbox name='salle_id' value=6/>A099 (C2M - Denis Papin)<br>
    <input type=checkbox name='salle_id' value=5/>B020 (C2M - Denis Papin)<br>
    <input type=checkbox name='salle_id' value=4/>B055 (C2M - Sciences)<br>
    <input type=checkbox name='salle_id' value=2/>C100 (C2M - Denis Papin)<br>
    <input type=checkbox name='salle_id' value=7/>C134 (C2M - Sciences)<br>
    <input type='submit' value='Afficher'>
</form>


et voici le code de ma fonction javaScript affecter (simplifiée pareil) :

function affecter(id_logiciel)
{
   var salle = new Array(); 
   salle = $("#form_affectation").find("input[name=salle_id]").val();
   alert(salle.length);
   $.post("jQuery/affecter.php", { salle: salle },
        function success(data){
        $('#tableau_affectation').html(salle);	
   });
}


Le problème est que cette fonction ne marche pas. Si je fais un alert(salle.legth); il me trouve 1 ! Et si je fais alert(salle); (meme en ne cochant aucune chexbox) il me trouve 6 (rapport avec la valeur de ma première checkox a mon avis).

Help please !

Merci d'avance ++
A voir également:

20 réponses

Vodkadaaa Messages postés 13 Date d'inscription vendredi 30 octobre 2009 Statut Membre Dernière intervention 8 novembre 2009 14
30 oct. 2009 à 18:54
Mon formulaire est à la base en php, mais j'ai bien précisé que je l'avais retranscrit en html (pour que ce soit plus lisible).

En plus, tu confonds aussi les checkbox avec les radio ! 
Ton script peut mal de fonctionner puisque tu ne peux pas avoir plusieurs checkbox avec le même name.
 

Ah je ne savais pas ça. Mais à la base pour les name j'avais un tableau id_salle[].

Je met mon formulaire en php cette fois si avec les name=id_salle[]

$echo .= "<form id='form_affectation' onsubmit='affecter($id_logiciel); vider_div(\"tableau_logiciels_salles\"); return false;'>";
      while ($res=mysql_fetch_array($result)) 
      {
          $echo .= "<input type=checkbox name='salle_id[]' value=".$res['idSalle']." />".$res['numSalle']." (".$res['nomSite'].")<br>";
      }	
$echo .= <input type='submit' value='Afficher'>";
$echo .= "</form>";


Je précise aussi que ce formulaire fonctionnait parfaitement quand je récuperais mes checkbox en php avec un foreach().

merci d'avance
4
Vodkadaaa Messages postés 13 Date d'inscription vendredi 30 octobre 2009 Statut Membre Dernière intervention 8 novembre 2009 14
31 oct. 2009 à 00:10
Cool ça marche.

j'ai fais ça :

function affecter(id_logiciel, nbrCheckbox)
{
     var nbrCheckbox = nbrCheckbox;
     for(i=1 ; i <= nbrCheckbox ; i++) 
     {
          var currentCheckbox = document.getElementById("salle_" + i);
          if(currentCheckbox.checked) 
          { 
	alert(currentCheckbox.name + " est coché");
          }
      }
 return false;
	
}

Ce qui revient au même que ce que tu as fais (encore merci :D )

Me reste plus qu'a trouver comment passer toutes mes variables avec $post (je l'avais oublié ça) mais le plus gros en fait !
2
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 497
30 oct. 2009 à 18:41
J'ai un formulaire en php.
Apprenez à utiliser des termes correctes ! Ton formulaire est en (x)HTML !

En plus, tu confonds aussi les checkbox avec les radio !
Ton script peut mal de fonctionner puisque tu ne peux pas avoir plusieurs checkbox avec le même name.
1
C'est bien de faire des remarques, mais si c'est pour dire des énnormités comme "tu ne peux pas avoir plusieurs checkbox avec le même name." :)
0
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 497
5 oct. 2010 à 18:42
« C'est bien de faire des remarques, mais si c'est pour dire des énnormités »
Ça tombe bien, cette phrase peut t'être retournée.
Tu me diras l'intérêt d'avoir plusieurs checkbox avec le même name : si au moins une est cochée, alors l'entrée 'name' existera dans $_POST.
0
L'intérêt des "checkbox", comparés au "radio", c'est justement de pouvoir avoir plusieurs éléments de même name dans $_POST['name'].
$_POST['name'] sera alors un tableau de valeur. Ce qui peut être TRÈS utile pour sélectionner des messages à supprimer par exemple...
Personnellement, je ne vois pas l'intéret d'utiliser des checkbox si c'est pour ne pas récupérer plusieurs valeurs... si tu veux seulement une seule valeur, il y a les radio.
0
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 497
25 janv. 2011 à 16:45
Alors on ajoute des crochets à la fin du name.
0
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 497
30 oct. 2009 à 19:03
Mon formulaire est à la base en php
Non ! Tu écris son code source XHTML avec des echo en PHP, ce qui revient à du simple (x)HTML pour le navigateur

Par contre, je ne vois pas trop bien ce que tu veux faire.
Autre info : si tu veux vérifier si un checkbox est coché, utilise ".checked" qui renverra true si c'est le cas.
1

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

Posez votre question
Vodkadaaa Messages postés 13 Date d'inscription vendredi 30 octobre 2009 Statut Membre Dernière intervention 8 novembre 2009 14
30 oct. 2009 à 19:17
Non ! Tu écris son code source XHTML avec des echo en PHP, ce qui revient à du simple (x)HTML pour le navigateur

Ah excuse moi alors...

Ce que je veux faire c'est récupérer les valeurs des chexbox cochés (pas les autres) dans une fonction pour pouvoir les passés avec la méthode $post dans un autre document php. Puis les récupérer sous forme de tableau (en php).

Un .checked ne me permet pas de récupérer la valeur :x
1
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 497
30 oct. 2009 à 19:24
Ah excuse moi alors...
Pas besoin de t'excuser, mais j'espère que tu as compris que dans ce genre de problème, savoir que tu utilises du PHP ne sert à rien du tout car le problème est côté client.

Essaye avec ça :
function affecter(id_logiciel)
{
   var salle = new Array(); 
   salle .= $("#form_affectation").find("input[name=salle_id]").val();
   alert(salle.length);
   $.post("jQuery/affecter.php", { salle: salle },
        function success(data){
        $('#tableau_affectation').html(salle);	
   });
}
1
Vodkadaaa Messages postés 13 Date d'inscription vendredi 30 octobre 2009 Statut Membre Dernière intervention 8 novembre 2009 14
30 oct. 2009 à 19:51
Marche pas. D'après Firebug c'est le point devant le égale qui ne va pas.
1
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 497
30 oct. 2009 à 19:53
Essaye avec ça :
salle[] += $("#form_affectation").find("input[name=salle_id]").val();
1
Vodkadaaa Messages postés 13 Date d'inscription vendredi 30 octobre 2009 Statut Membre Dernière intervention 8 novembre 2009 14
30 oct. 2009 à 20:02
J'avais déjà essayé avec des crochets mais pas le point et ça ne marchait pas. Apparemment là non plus :x

Question surement très idiote mais est il possible en JavaScript de mettre des variables pour les nom de variables ?
1
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 497
30 oct. 2009 à 20:24
Question surement très idiote mais est il possible en JavaScript de mettre des variables pour les nom de variables ?
Je suppose que oui, mais je ne sais pas comment (essaye comme en PHP).

Je te propose une autre méthode :
Mets un id différent pour chaque checkbox, et à chaque fois que tu en insères une, tu insères aussi un script JS qui ajoutera l'ID dans un array. Ainsi, il te suffira de parcourir l'array pour avoir tous les ID et pouvoir récupérer les valeurs.
1
Vodkadaaa Messages postés 13 Date d'inscription vendredi 30 octobre 2009 Statut Membre Dernière intervention 8 novembre 2009 14
30 oct. 2009 à 21:23
J'ai pas très bien compris...

Tu veux que je fasse un truc comme ça?

$echo .= "<form id='form_affectation' onsubmit='affecter($id_logiciel); vider_div(\"tableau_logiciels_salles\"); return false;'>";
      while ($res=mysql_fetch_array($result)) 
      {
          function ajouter($res['numSalle']);
          $echo .= "<input type=checkbox name=".$res['numSalle']" value=".$res['idSalle']." />".$res['numSalle']." (".$res['nomSite'].")<br>";
      }	
$echo .= <input type='submit' value='Afficher'>";
$echo .= "</form>";


fonction ajouter(numSalle)
{
     var tableau = new Array('numSalle');
     tableau = tableau.push(numSalle);
}


Mais le problème c'est qu'a chaque fois le tableau se réinitialise.
En plus il y aura toutes les checkbox, or certaines peuvent ne pas etre coché par l'utilisateur.
Et je serait quand meme obligé de passer le tableau en paramètre pour ma fonction affecter

Non?
1
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 497
30 oct. 2009 à 21:27
Mais le problème c'est qu'a chaque fois le tableau se réinitialise
Voilà ton script :
fonction ajouter(numSalle)
{
     var tableau = new Array('numSalle');
     tableau = tableau.push(numSalle);
}
C'est assez voyant ?
1
Vodkadaaa Messages postés 13 Date d'inscription vendredi 30 octobre 2009 Statut Membre Dernière intervention 8 novembre 2009 14
30 oct. 2009 à 21:34
Bah oui mais je ne vois pas comment faire autrement.
Il faut bien l'initialiser au départ et on ne peut le faire que dans la fonction...

Je ne vois vraiment pas comment faire et pourtant c'est banale comme truc. Je ne trouve rien sur internet ! N'y a t'il personne qui fait ça?
1
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 497
30 oct. 2009 à 22:24
De toutes façon, tu appeles la fonction JS depuis le PHP, c'est impossible !
Ensuite, tu ne peux pas transmettre un array depuis POST ni par GET
1
Vodkadaaa Messages postés 13 Date d'inscription vendredi 30 octobre 2009 Statut Membre Dernière intervention 8 novembre 2009 14
30 oct. 2009 à 22:40
De toutes façon, tu appeles la fonction JS depuis le PHP, c'est impossible !

Je suis d'accord avec toi.

Ensuite, tu ne peux pas transmettre un array depuis POST ni par GET

Bon bah je n'ai plus qu'a trouver une autre solution..

Merci quand même ++
1
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 497
30 oct. 2009 à 23:13
Mouhahahaha !
Je t'ai trouvé une alternative.
Voici la démo :)
1
Vodkadaaa Messages postés 13 Date d'inscription vendredi 30 octobre 2009 Statut Membre Dernière intervention 8 novembre 2009 14
30 oct. 2009 à 23:24
Ahhh merci avion-f16 !! Je commençais à désespérer sérieusement :x

Je n'ai plus qu'a remplacer "var nbCheckbox = 5;" par "var nbCheckbox = $nbrCheckbox" et ça va fonctionner!
1
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 497
30 oct. 2009 à 23:38
N'oublie pas de générer l'id.
Pour le nombre, il suffit de faire <?php echo $nbrCheckbox; ?>
1
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 497
31 oct. 2009 à 13:08
Il suffit de généré la chaine "var=value&var2=value".
Je te fais un exemple, toujours à la même adresse
1
Vodkadaaa Messages postés 13 Date d'inscription vendredi 30 octobre 2009 Statut Membre Dernière intervention 8 novembre 2009 14
31 oct. 2009 à 16:08
Oh encore merci !

Pour toi c'est facile mais moi je débute jsute en javaScript et Ajax donc je n'ai pas encore le mécanisme du langage :x . J'espère que ça viendra vite
1