IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

desactivation d'un input selon choix radio


Sujet :

JavaScript

  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 172
    Par défaut desactivation d'un input selon choix radio
    Bonjour, je cherche a desactivé un input selon le choix d'un bouton radio :



    SI libre occupé est coché, le prix doit etre desactivé.

    Ce tableau est dynamique, il resulte des choix de l'internaute donc je doit faire un javascript qui tienne en compte ceci.

    exemple du retour HTML du tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <tr>
    	  				<td>2</td>
                         <td>du 20/12/2008 au 27/12/2008</td>
                         <td>
                           <input type="radio" id="rad2" name="etat[1229727600]" value="1" onclick="onYes();" checked>
                           Libre
                         </td>
                         <td>
                           <input type="radio" id="rada2" name="etat[1229727600]" value="0" onclick="onNo();">
                           Occup&eacute;
                         </td>
                         <td>
                           <input name="prix[1229727600]" id="prix2" type="text" size="10" class="test">€
                         </td>
                       </tr>
    Voici mon javascript :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    function updateBox()
    {
      	var inputdist = document.getElementById('tableau').getElementsByTagName('input');
    	for(var i=0; i<inputdist.length; i++){
    	enableBox(document.getElementById("rad"+[i]).checked);
    										 }
    }
     
    function enableBox(yes)
    {
        var inputmist = document.getElementById('tableau').getElementsByTagName('input');
    	for(var i=0; i<inputmist.length; i++){
    	document.getElementById("prix"+[i]).disabled=!yes;
    										 }
    }
     
    function onYes()
    {
    	updateBox();
    }
     
    function onNo()
    {
    	updateBox();
    }
     
    function onLoad()
    {
    	updateBox();
    }
    le probleme viens de la ligne

    enableBox(document.getElementById("rad"+[i]).checked);

    j'ai cette erreur dans le navigateur :

    document.getElementById(...) is null or not a object.

    Voyez vous l'erreur ?

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    enableBox(document.getElementById("rad"+i).checked);
    tout simplement, idem avec les champs prix.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 172
    Par défaut
    Merci,

    J'ai enlevé les [] mais cela ne change rien, toujours la meme erreur

  4. #4
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Oui, c'est normal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var inputdist = document.getElementById('tableau').getElementsByTagName('input');
    Tu récupères tous les input, y compris ceux qui n'ont pas comme id 'rad'+i, donc à un moment, le getElementById ne trouve pas l'élément.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 172
    Par défaut
    je ne vois pas comment faire autrement pour recuperer mes valeurs. Tu aurais une idée.
    Sachant que les id sont sont générés grace a un script php.

  6. #6
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    En rajoutant un test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function updateBox()
    {
      	var inputdist = document.getElementById('tableau').getElementsByTagName('input');
    	for(var i=0; i<inputdist.length; i++){
    	if(inputdist[i].id.match('rad'){enableBox(inputdist[i]).checked);}
    										 }
    }
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  7. #7
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 172
    Par défaut
    pardonne moi d'insister mais toujours un pb
    J'ai mofidié

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    function updateBox()
    {
      	var inputdist = document.getElementById('tableau').getElementsByTagName('input');
    	for(var i=0; i<inputdist.length; i++){
    	if(inputdist[i].id.match('rad'){enableBox(inputdist[i]).checked));}
    }
     
    function enableBox(yes)
    {
        var inputmist = document.getElementById('tableau').getElementsByTagName('input');
    	for(var i=0; i<inputmist.length; i++){
    	document.getElementById("prix"+i).disabled=!yes;
    										 }
    }
     
    function onYes()
    {
    	updateBox();
    }
     
    function onNo()
    {
    	updateBox();
    }
     
    function onLoad()
    {
    	updateBox();
    }
    J'obtiens l'erreur / Object expected

  8. #8
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Attention aux parenthèses et accolades...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function updateBox()
    {
      	var inputdist = document.getElementById('tableau').getElementsByTagName('input');
    	for(var i=0; i<inputdist.length; i++){
    	    if(inputdist[i].id.match('rad')){enableBox(inputdist[i]).checked;}
    	}
    }
    Et fait la même chose pour la fonction suivante ou tu auras aussi la même erreur !
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  9. #9
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 172
    Par défaut
    Je pense toucher au but , ca doit donner ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    function updateBox()
    {
      	var inputdist = document.getElementById('tableau').getElementsByTagName('input');
    	for(var i=0; i<inputdist.length; i++){
    	if(inputdist[i].id.match('rad')) {
    	enableBox(inputdist[i]).checked; }
    	}
    }
     
    function enableBox(yes)
    {
        var inputmist = document.getElementById('tableau').getElementsByTagName('input');
    	for(var i=0; i<inputmist.length; i++){
    	if(inputmist[i].id.match('prix')) {
    		document.getElementById("prix"+i).disabled=!yes;
    									  }
    										 }
    }
     
    function onYes()
    {
    	updateBox();
    }
     
    function onNo()
    {
    	updateBox();
    }
     
    function onLoad()
    {
    	updateBox();
    }
    Mais ca bloque encore, ce qui me bloque je pense c'est le xxxx.length

  10. #10
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 172
    Par défaut
    Quelques précisions, je pensais que mon erreur venait de :

    enableBox(document.getElementById("rad"+[i]).checked);

    mais en faisant une pure page HTML , je me rend compte que l'erreur vient de :

    document.getElementById("prix"+[i]).disabled=!yes

    Voici le retour HTML de cette page :

    http://copenaol.free.fr/debug.html

    Le script fonctionne mais toujours cette erreur en bas de page (document.getElementById(...) is null or not a object.)

    J'utilise la même fonction pour vérifier si le prix est renseigné si Libre est coché et cela fonctionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
       function test() {
          var inputList = document.getElementById('tableau').getElementsByTagName('input');
    		for(var i=0; i<inputList.length; i++){
    		if(document.getElementById("prix"+i).value== "" && document.getElementById("rad"+[i]).checked)
    		{
    		alert ("Veuillez remplir le prix de la ligne " +[i]+ ". Le champs libre étant coché, vous devez rentrer un prix");
    		document.getElementById("prix"+i).focus();
    		return false;
    		}
    											 }
    					}
    Petite remarque concernant le .length

    Dans l'exemple debug.html, j'ai fait un alert et il me retourne 11 (3 libres + 3 occupé + 3 prix + 1 champ hidden + 1 bouton), donc utilisé le length dans exemple me parait pas pertinant, la boucle va se faire 11 fois alors que je n'ai que 3 lignes a vérifier. Je ne sais pas comment faire une boucle avec simplement le nombre exacte de ligne car le nombre de ligne chaque fois en fonction du choix de l'internaute (tableau dynamique généré en php)

  11. #11
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Bon, j'ai un peu raté mon exemple...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function updateBox()
    {
      	var inputdist = document.getElementById('tableau').getElementsByTagName('input');
    	for(var i=0; i<inputdist.length; i++){
    	if(inputdist[i].id.match('rad')) {
    	enableBox(inputdist[i].checked); }
    	}
    }
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  12. #12
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 172
    Par défaut
    Si je suis cet exemple , ca doit me donner pour la fonction enableBox :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function enableBox(yes)
    {
        var inputmist = document.getElementById('tableau').getElementsByTagName('input');
    	for(var i=0; i<inputmist.length; i++){
                 if(inputmist[i].id.match('prix')) {
    	inputmist[i].disabled=!yes;
    									  }
    										 }
    }

  13. #13
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Oui, mais là, tous tes input prix seront modifiés selon le choix du checkbox cliqué... Une autre solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function updateBox()
    {
      	var inputdist = document.getElementById('tableau').getElementsByTagName('input');
    	for(var i=0; i<inputdist.length; i++){
    	if(inputdist[i].id.match('rad')) {
    	    var nb = inputdist[i].id.match(/d+/);
                document.getElementById('prix'+nb).disabled = !inputdist[i].checked}
    	}
    }
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  14. #14
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 172
    Par défaut
    Merci pour ta patience;
    Meme pb ++> document.getElementById('prix'+nb).disabled = !inputdist[i].checked}


    erreur document.getElementById(...) is null or not a object

    Je ne comprend pas ce que veut dire cette erreur, la fonctionne renvoie pas Null et n'est pas considéré comme etant un objet. Je seche

  15. #15
    Membre Expert
    Avatar de Jumano
    Profil pro
    Inscrit en
    Février 2007
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 1 163
    Par défaut
    Bonjour,
    il ne serait pas plus siple de s'inspirer de la FAQ et donc de faire ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function enableBox(nombre){
    if (document.getElementById('rad'+nombre).checked) {
    	document.getElementById('prix'+nombre).disabled=false;
    	} else {				  
    	document.getElementById('prix'+nombre).disabled=true;
    }
    }
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <td>
    <input type="radio" id="rad0" name="etat[1228604400]" value="1" onclick="enableBox('0');" checked="checked"> Libre
    </td>
    <td>
    <input type="radio" id="rada0" name="etat[1228604400]" value="0" onclick="enableBox('0');"> Occup&eacute;
    </td>
    <td>
    <input name="prix[1228604400]" id="prix0" type="text" size="10" class="test">€
    </td>

  16. #16
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 172
    Par défaut
    Jumano, Bovino, je vous remercie, cela fonctionne.
    Je suis depuis quelques jours dessus avec mon tableau dynamique sans trouver la solution.

    Pour le ...length, sauriez vous comment l'enlever pour avoir pile poile le nbre de test et ainsi ne pas faire des loops pour rien ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
       function test() {
          var inputList = document.getElementById('tableau').getElementsByTagName('input');
    		for(var i=0; i<inputList.length; i++){
    		if(document.getElementById("prix"+i).value== "" && document.getElementById("rad"+[i]).checked)
    		{
    		alert ("Veuillez remplir le prix de la ligne " +[i]+ ". Le champs libre étant coché, vous devez rentrer un prix");
    		document.getElementById("prix"+i).focus();
    		return false;
    		}
    											 }
    					}

  17. #17
    Membre Expert
    Avatar de Jumano
    Profil pro
    Inscrit en
    Février 2007
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 1 163
    Par défaut
    Re,
    Tu peux ajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(var i=0; i<inputList.length; i++){
     
    if(inputList[i].type=='radio') {

  18. #18
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 172
    Par défaut
    merci bcp a vous deux, tout est ok

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AJAX] actualiser div selon choix bouton radio
    Par Raph87 dans le forum AJAX
    Réponses: 17
    Dernier message: 29/04/2011, 05h46
  2. Réponses: 4
    Dernier message: 11/09/2010, 13h15
  3. [AJAX] renseigner des input selon choix dans une liste deroulante
    Par abconcept dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 28/02/2009, 15h06
  4. contenu de div qui change selon choix dans liste de boutons radios ?
    Par cuisto44000 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 13/12/2008, 16h10
  5. desactiver des input d'1 form, selon les radios
    Par zimotep dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 13/08/2006, 17h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo