Partage
  • Partager sur Facebook
  • Partager sur Twitter

Savoir si un radio est coché

Encore et toujours ce problème partout

Sujet résolu
    14 janvier 2009 à 13:25:35

    Bonjour,

    J'ai remarqué ce problème revenait assez souvent sur tout les forums que j'ai regardé mais j'arrive toujours pas a faire marché ma fonction :( .

    Dans mon formulaire je demande le sexe de la personne (femme ou homme).
    Si il n'a pas choisi de sexe alors je bloque l'envoie du formulaire. Sauf que j'arrive pas a savoir quand le radio est coché.

    HTML:
    <span id="sexe_titre" >Sexe :</span><br/>
    		<label for="sexe_homme">Homme</label><input name="sexe" type="radio"  value="Homme" id="sexe_homme">
    		<label for="sexe_femme">Femme</label><input name="sexe" type="radio"  value="Femme" id="sexe_femme"><br/><br/>
    


    Javascrip:
    function form_valide(radio)
    {
    element_radio=radio.split(';');
    for(x=0;x<element_radio.length-1;x++)
    {	
    document.getElementById(element_radio[x]+"_titre").style.backgroundColor ="white";
    if(document.getElementsByName(element_radio[x]).checked) //si la case est choché 
    {
    	document.getElementById(element_radio[x]+"_titre").style.backgroundColor ="red";
    	formulaire_bon=false;
    	alert('pouet');
    }	
    }
    }
    


    Si je fais un alert(document.getElementsByName(element_radio[x]).checked); il me dit "undefined".
    • Partager sur Facebook
    • Partager sur Twitter
      14 janvier 2009 à 13:53:36

      Citation : Anaxode

      Si je fais un alert(document.getElementsByName(element_radio[x]).checked); il me dit "undefined".


      getElementsByName demande en plus du "name" à chercher le numéro de la balise contenant ce "name".
      En gros, au lieu de faire sa : alert(document.getElementsByName(element_radio[x]).checked);
      Il faudrait mettre sa : alert(document.getElementsByName(element_radio[x])[0].checked);
      • Partager sur Facebook
      • Partager sur Twitter
        14 janvier 2009 à 14:16:39

        J'ai fait une fonction qui sert à récupérer la valeur d'une liste de radio : elle retourne false si aucun radio n'est coché, sinon elle retourne la valeur de celui qui est coché. Elle prend en paramètre le name des radio.
        //Retourne la valeur d'une liste de radio
        function radioValue(name){
        	var value = false;
        	//Recherche de tous les radio de la page
        	var inputs = document.getElementsByTagName('input');
        	for(i=0; i<inputs.length; i++){
        		//On regarde s'il s'agit d'un radio possédant le nom souhaité, si c'est le cas on regarde s'il est coché
        		if(inputs[i].type == 'radio' && inputs[i].name == name && inputs[i].checked){
        			value = inputs[i].value;
        		}
        	}
        	return value;
        }
        


        Pour débuguer ton script, voilà déjà une version commentée pour corriger quelques erreurs :
        function form_valide(radio){
        	var element_radio = radio.split(';'); //Il faut mettre un "var" lorsque l'on déclare une nouvelle variable
        	for(var x=0;x<element_radio.length-1;x++){ 	//Il ne faut pas mettre de -1 pour parcourir l'ensemble du tableau, tu as déjà mis que l'on devait s'arreter à x<length
        												//En plus de cela : met un var devant la déclaration du x=0 dans le for, sinon tu risques d'avoir des bugs si tu refais une boucle en utilisant x
        		document.getElementById(element_radio[x]+"_titre").style.backgroundColor ="white";
        		if(document.getElementsByName(element_radio[x]).checked) /*getElementsByName est foireux sous IE : cf commentaire dans le post, et sinon la fonction retourne un tableau, tu ne peux pas l'utiliser ainsi sans une clé*/
        		{
        			document.getElementById(element_radio[x]+"_titre").style.backgroundColor ="red";
        			var formulaire_bon=false; //var devant la variable déclarée
        			alert('pouet');
        		}	
        	}
        }
        


        Mais il ne peut pas marcher, pour deux raisons. Premièreement, getElementsByName est complètement foireux sous IE, qui ne distingue pas id et name quand il utilise cette fonction. La solution pour contourner le problème consiste à passer par getElementsByTagName, puis contrôler le name pour voir s'il s'agit de celui que l'on cherche. C'est ce qui est fait dans ma fonction radioValue(). De plus, cela t'évite d'être obligé de mettre tes radio dans un span.
        De plus, ces deux fonctions retournent des tableaux, tu ne peux donc utiliser leur retour qu'en le parcourant, ou alors en lui donnant une clé :
        document.getElementsByName('name souhaité')[x].style.checked
        


        J'ai un autre script qui pourrait te donner des pistes pour ce que tu veux faire : une vérification automatique de formulaire. Elle prend en paramètre des names et vérifie que l'input (text, textarea, select, radio ou checkbox) possède une valeur : http://dev.twiip.ch/scripts/verifform/
        • Partager sur Facebook
        • Partager sur Twitter
          14 janvier 2009 à 18:52:29

          Merci beaucoup pour votre intervention rapide.

          J'avais déjà fait une fonction pour les input text et select (c'est bien plus simple).

          Je regarderais ce que tu as fais Elias.
          • Partager sur Facebook
          • Partager sur Twitter

          Savoir si un radio est coché

          × 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