Posez votre question Signaler

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

Vodkadaaa 14Messages postés 30 octobre 2009Date d'inscription - Dernière réponse le 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 ++
Lire la suite 

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

24 réponses
Réponse
+2
moins plus
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
Ajouter un commentaire
Réponse
+2
moins plus
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 !
Ajouter un commentaire
Réponse
+1
moins plus
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.
avion-f16- 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.
Arnadus - 25 janv. 2011 à 10:39
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.
avion-f16- 25 janv. 2011 à 16:45
Alors on ajoute des crochets à la fin du name.
Ajouter un commentaire
Réponse
+1
moins plus
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.
Ajouter un commentaire
Réponse
+1
moins plus
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
Ajouter un commentaire
Réponse
+1
moins plus
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);	
   });
}
Ajouter un commentaire
Réponse
+1
moins plus
Marche pas. D'après Firebug c'est le point devant le égale qui ne va pas.
Ajouter un commentaire
Réponse
+1
moins plus
Essaye avec ça :
salle[] += $("#form_affectation").find("input[name=salle_id]").val();
Ajouter un commentaire
Réponse
+1
moins plus
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 ?
Ajouter un commentaire
Réponse
+1
moins plus
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.
Ajouter un commentaire
Réponse
+1
moins plus
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?
Ajouter un commentaire
Réponse
+1
moins plus
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 ?
Ajouter un commentaire
Réponse
+1
moins plus
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?
Ajouter un commentaire
Réponse
+1
moins plus
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
Ajouter un commentaire
Réponse
+1
moins plus
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 ++
Ajouter un commentaire
Réponse
+1
moins plus
Mouhahahaha !
Je t'ai trouvé une alternative.
Voici la démo :)
Ajouter un commentaire
Réponse
+1
moins plus
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!
Ajouter un commentaire
Réponse
+1
moins plus
N'oublie pas de générer l'id.
Pour le nombre, il suffit de faire <?php echo $nbrCheckbox; ?>
Ajouter un commentaire
Réponse
+1
moins plus
Il suffit de généré la chaine "var=value&var2=value".
Je te fais un exemple, toujours à la même adresse
Ajouter un commentaire
Réponse
+1
moins plus
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
Ajouter un commentaire
Ce document intitulé « [jQuery] Récupérer checkbox dans une fonction » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?