Partage
  • Partager sur Facebook
  • Partager sur Twitter

Verifier qu'une checkbox est cochée

Problème sur ma fonction javascript

    4 avril 2009 à 13:49:44

    Bonjour, j'ai un formulaire avec 4 boîtes à cocher.
    J'aimerais que lorsqu'on clique sur une d'entre elle alors une fonction javascript est éxécutée (fonction ajax pour envoyer des éléments via la méthode GET)
    Voici le code que j'ai:
    <?php
    echo "<div class='options_perso'>";
        echo "Chiffre d'affaire HT <input name='ca' id='ca' type='checkbox' onclick='checkedForm()' value=\"Chiffre d'affaire [Recettes]\" /><br />";
        echo "Achats <input name='dep' id='dep' type='checkbox' onclick='checkedForm()' value='Achats [Dépenses]' /><br />";
    echo "</div>";
    ?>
    

    <!-- Méthode Get -->
    affdyn = function (div,liens,param1,param11,param2,param22,param3,param33,param4,param44)
    {
    	$(div).innerHTML = loading.loadingstate;
    	var div = div;
    	var url = liens+'?'+param1;
    	var parametres = param1+'='+param11+'&'+param2+'='+param22+'&'+param3+'='+param33+'&'+param4+'='+param44;
    	var MyAjax = new Ajax.Updater(
    		div,
    		url,
    		{
    			method: 'get', 
    			parameters: parametres, 
    			evalScripts: true
    		}
    	);
    }
    
    function checkedForm() {
    	if($('ca').value == "Chiffre d'affaire [Recettes]" || $('dep').value == "Achats [Dépenses]") {
    		if($('ca').value == "Chiffre d'affaire [Recettes]") {
    			ca = 'true';
    		}
    		else {
    			ca = false;
    		}
    		<!-- Achats sélectionné -->
    		if($('dep').value == "Achats [Dépenses]") {
    			dep = 'true';
    		}
    		else {
    			dep = false;
    		}
    		affdyn('statistiques_perso','gestion/graphiques/load_graphique.php','ca',ca,'dep',dep); // Affdyn(DIV,URL) modifie la DIV en y insérant une page URL, tiré de Ajax.updater(DIV,URL, {Method: 'get'})
    	}
    	else
    	{
    		ca = false;
    		dep = false;
    		$('statistiques_perso').innerHTML = "<img src='images/graphiques/no_graphic.png' width='695px' height='695px' />";
    	}
    }
    

    Dans load_graphique.php j'ai
    <?php
    if(isset($_GET['ca']))
    {
    	if($_GET['ca'] == 'true')
    	{
                // Code PHP
            }
    }
    if(isset($_GET['dep']))
    {
    	if($_GET['dep'] == 'true')
    	{
                // Code PHP
            }
    }
    ?>
    

    Le soucis est que lorsque je clique sur l'une des checkbox, ma fonction javascript sur le onclick est bien appelée et exécutée sauf que dans tous les cas les variables 'ca' et 'dep' valent 'true' même lorsqu'elle ne sont pas pas cochée, du coup les conditions dans mon fichier load_graphique.php ne servent à rien car quoi qu'il arrive elles seront toujours éxécutées.

    Quelqu'un aurait une piste pour remédier à ce problème?
    • Partager sur Facebook
    • Partager sur Twitter
      4 avril 2009 à 13:59:25

      Les commentaires javascript NE SE FONT PAS avec <!-- -->
      Il faut des /* */ ou // !



      http://www.siteduzero.com/forum-83-329 [...] active-e.html
      C'est $('id').checked et non .value
      • Partager sur Facebook
      • Partager sur Twitter
        4 avril 2009 à 14:14:07

        Ok, en faite j'avais déja éssayé avec 'checked' mais quand j'utilise 'checked', rien ne se passe; Chand je coche mes checkbox, j'ai mon url dans 'affdyn() ne se charge pas'.
        J'ai ceci maintenant:
        function checkedForm() {
        	if($('ca').checked == "Chiffre d'affaire [Recettes]" || $('dep').checked == "Achats [Dépenses]") {
        		if($('ca').checked == "Chiffre d'affaire [Recettes]") {
        			ca = 'true';
        		}
        		else {
        			ca = false;
        		}
        		// Achats sélectionné
        		if($('dep').checked == "Achats [Dépenses]") {
        			dep = 'true';
        		}
        		else {
        			dep = false;
        		}
        		affdyn('statistiques_perso','gestion/graphiques/load_graphique.php','ca',ca,'dep',dep);
        	}
        	else
        	{
        		ca = false;
        		dep = false;
        		$('statistiques_perso').innerHTML = "<img src='images/graphiques/no_graphic.png' width='695px' height='695px' />";
        	}
        }
        


        EDIT
        Non c'est bon, je viens lire ton lien que j'avais pas vu au début:
        J'ai retiré les égalités pour le 'checked' et du coup j'ai:
        function checkedForm() {
        	if($('ca').checked || $('dep').checked) {
        		if($('ca').checked) {
        			ca = 'true';
        		}
        		else {
        			ca = false;
        		}
        		// Achats sélectionné
        		if($('dep').checked) {
        			dep = 'true';
        		}
        		else {
        			dep = false;
        		}
        		affdyn('statistiques_perso','gestion/graphiques/load_graphique.php','ca',ca,'dep',dep);
        	}
        	else
        	{
        		ca = false;
        		dep = false;
        		$('statistiques_perso').innerHTML = "<img src='images/graphiques/no_graphic.png' width='695px' height='695px' />";
        	}
        }
        

        Et sa fonctionne à mort :p
        Merci Tiller ;)
        • Partager sur Facebook
        • Partager sur Twitter
          4 avril 2009 à 14:29:33

          Tu peux raccourcir comme ça aussi:

          function checkedForm() {
          	var ca = $('ca').checked;
          	var dep = $('dep').checked;
          	
          	if (ca || dep) {
          		affdyn('statistiques_perso','gestion/graphiques/load_graphique.php','ca',ca,'dep',dep);
          	}
          	else {
          		$('statistiques_perso').innerHTML = "<img src='images/graphiques/no_graphic.png' width='695px' height='695px' />";
          	}
          }
          
          • Partager sur Facebook
          • Partager sur Twitter
            4 avril 2009 à 15:10:45

            Ok merci ;) C'est mieux en effet.

            Une dernière question:
            comment fait-on dans le cas où on aurait ceci:
            <?php
            echo "jour/jour <input name='periode' class='periode' type='radio' onclick='checkedForm()' value='31'><br />";
            	echo "mois/mois <input name='periode' class='periode' type='radio' onclick='checkedForm()' checked='checked' value='12'><br />";
            	echo "6 derniers mois <input name='periode' class='periode' type='radio' onclick='checkedForm()' value='6'><br />";
            	echo "année/année <input name='periode' class='periode' type='radio' onclick='checkedForm()' value='1'><br />";
            ?>
            

            Parce que on peut pas spécifier plusieurs ID ???
            • Partager sur Facebook
            • Partager sur Twitter
              4 avril 2009 à 19:32:55

              1) On est sur le forum javascript... donc le PHP, on s'en fout... passes le HTML généré...
              2) Pour le code comme ça, tu peux fermer la balise PHP et la réouvrir... c'est beaucoup mieux qu'un long écho...
              • Partager sur Facebook
              • Partager sur Twitter
                4 avril 2009 à 22:07:24

                le HTML généré correspond à ce que j'ai mis entre les balises PHP ci dessus. Sinon çà ne m'aide pas trop...
                • Partager sur Facebook
                • Partager sur Twitter
                  5 avril 2009 à 7:44:18

                  Merci j'avais compris >_<
                  Mais pourquoi tu utilises des echo ? alors que vu que tu n'as pas de variable, tu pourrais simplement fermer des balises <?php ?>

                  Ensuite, que doit faire ta fonction ?
                  Vérifier un élément ou tous les éléments ?
                  Si c'est tous c'est possible sans argument mais ça va être long le traitement à chaque changement...
                  Si c'est un seul, il faut passer un argument à la fonction... le this par exemple...
                  • Partager sur Facebook
                  • Partager sur Twitter
                    5 avril 2009 à 15:15:24

                    J'ai fait un copié collé de ce que j'ai réellement dans un fichier PHP de 300 lignes d'où le fait d'avoir mis des échos car c'est plus propre plutôt que de les ouvrir et refermer une dizaine de fois dans un même fichier. Sinon j'aurais pu faire qu'un seul echo pour ces 4/5 lignes au lieu d'en mettre 4, oui je sais mais c'est ma façon de coder, pour moi je lis mieux le code avec mon éditeur qui me colore mes écho et donc plus facilement repérable :)

                    Sinon en faite je voulais récupérer la valeur de ma liste des 4 boutons radio mais j'ai trouvé. En faite faut simplement boucler cette liste en recherchant bouton qui est sélectionné ("checked") et puis de récupérer la valeur du bouton sélectionné. Donc j'ai fais:
                    var periode = document.getElementsByName('periode');
                    	for(i=0;i<periode.length;i++){
                    		if(periode[i].checked){
                    			periode = periode[i].value;
                    		}
                    	}
                    

                    Donc evidemment faut passer par le tag "name" plutot que par l'id mais comme je travaille avec protoptype, je n'ai point trouver réponse quant à savoir le raccourci de document.getElementsByName() via la librairie. Je pensais à $$() mais il prend un array en valeur. Si quelqu'un à la raccourci en tête à moins qu'il faudrait créer une fonction soit même?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      5 avril 2009 à 15:17:14

                      $$()[0]
                      

                      Ca prend le premier de l'array...
                      Pour ce qui est des echo, ça ne te les colore pas comme du HTML... mais bon tu fais comme tu veux...
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Verifier qu'une checkbox est cochée

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown