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 :

Activer/désactiver des checkbox


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 214
    Par défaut Activer/désactiver des checkbox
    Bonjour à tous !

    Voici mon souci : il s'agit de traduire un texte d'une langue source vers une ou plusieurs langue cibles.
    La langue source doit être unique, c'est donc une list :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <select name="source"  onChange="activerCibles(this.form, 'cibles[]', this.value)">
    	<option value="francais"<?php if($source =='francais') echo 'selected="selected"';?>> Fran&ccedil;ais</option>
    	<option value="italien"<?php if($source == 'italien') echo 'selected="selected"';?>> Italien</option>
    	<option value="anglais"<?php if($source == 'anglais') echo 'selected="selected"';?>> Anglais</option>
    	<option value="allemand"<?php if($source == 'allemand') echo 'selected="selected"';?>> Allemand</option>
    	<option value="portugais"<?php if($source == 'portugais') echo 'selected="selected"';?>> Portugais</option>
    	<option value="espagnol"<?php if($source == 'espagnol') echo 'selected="selected"';?>> Espagnol</option>
    </select>
    Le test sur la variable php $source est là pour qu'après soumission du formulaire, la valeur sélectionnée elle

    Les langues cibles peuvent être multiples, ce sont donc des checkbox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <label><input type="checkbox" name="cibles[]" value="francais" <?php if(preg_match('/francais/', $liste_cibles)==true) echo 'checked="checked"';?>  onClick="Compter(this.form.nb_mots.value,this.form)"/>Fran&ccedil;ais</label>
    <label><input type="checkbox" name="cibles[]" value="anglais"   <?php if(preg_match('/anglais/', $liste_cibles)==true) echo 'checked="checked"';?> onClick="Compter(this.form.nb_mots.value,this.form)"/>Anglais</label>
    <label><input type="checkbox" name="cibles[]" value="italien"   <?php if(preg_match('/italien/', $liste_cibles)==true) echo 'checked="checked"';?> onClick="Compter(this.form.nb_mots.value,this.form)"/>Italien</label>
    <label><input type="checkbox" name="cibles[]" value="portugais" <?php if(preg_match('/portugais/', $liste_cibles)==true) echo 'checked="checked"';?> onClick="Compter(this.form.nb_mots.value,this.form)"/>Portugais</label>
    <label><input type="checkbox" name="cibles[]" value="espagnol"  <?php if(preg_match('/espagnol/', $liste_cibles)==true) echo 'checked="checked"';?> onClick="Compter(this.form.nb_mots.value,this.form)"/>Espagnol</label>
    <label><input type="checkbox" name="cibles[]" value="allemand"  <?php if(preg_match('/allemand/', $liste_cibles)==true) echo 'checked="checked"';?> onClick="Compter(this.form.nb_mots.value,this.form)"/>Allemand</label>
    La fonction "Compter(this.form.nb_mots.value,this.form)" est une fonction Javascript qui permet de compter le nombre de jours nécessaires à la traduction.

    Cependant il y a plusieurs contraintes :
    - la langue source et la langue cible ne peuvent être identiques. Pour l'instant je fais ce contrôle en php à la validation du formulaire. Mais étant données les contraintes suivantes, je souhaiterais le faire en Javascript.
    - j'ai des combinaisons de langues sources/cibles définies :
    FR vers (it, angl, esp, all, port)
    (it, angl, esp, all, port) vers FR

    Je souhaiterais donc :
    • au tout premier affichage du formulaire, la langue source "francais" est sélectionnée je souhaite donc que dans les langues sources :
      • le francais soit grisé et non sélectionnable
      • les autres langues (it, angl, esp, all, port) sont dipsonibles et cliquables
    • quand on sélectionne le français en langue source :
      • le francais est grisé et non sélectionnable
      • les autres langues (it, angl, esp, all, port) sont dipsonibles et cliquables
    • quand on sélectionne une des langues (it, angl, esp, all, port) en langue source
      • le francais est dipsonibles et cliquables
      • les autres langues (it, angl, esp, all, port) sont grisés et non sélectionnables

    J'avais fait un test avec la fonction "activerCibles(this.form, 'cibles[]', this.value)" que vous voyez sur le onChange de ma liste, mais sans succès.

    Voici le détail de cette fonction :

    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
    34
    35
    36
    37
     function activerCibles(form,inputName,source) {
    	switch (source) { 
    		case 'francais': 
    			form.cibles['francais'].disabled='true';
    			form.cibles['italien'].disabled='false';
    			form.cibles['anglais'].disabled='false';
    			form.cibles['espagnol'].disabled='false';
    			form.cibles['allemand'].disabled='false';
    			form.cibles['portugais'].disabled='false';
    			break; 
    		case 'italien': 
    		case 'anglais': 
    		case 'espagnol':
    		case 'allemand': 	
    		case 'portugais': 
    			form.cibles['francais'].disabled='false';
    			form.cibles['italien'].disabled='true';
    			form.cibles['anglais'].disabled='true';
    			form.cibles['espagnol'].disabled='true';
    			form.cibles['allemand'].disabled='true';
    			form.cibles['portugais'].disabled='true';
    			break;
    	}
    	var inputs = form.elements[inputName];
     
    	for (var i = 0; i < inputs.length; i++) {
    		var input = inputs;
    		alert(input.value);
    			if (input.value == source) {
    				input.disabled = true;
    				input.checked = true;
    			}
    			else {
    				input.disabled = false;
    			}
    	}
    }
    Pourriez-vous m'aider ?


    Merci beaucoup

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 214
    Par défaut
    Pour préciser, lorsque je sélectionne une valeur dans la liste de langues sources, j'obtiens l'erreur suivante :

    " 'cibles.francais' a la valeur Null ou n'est pas un objet "

    Cette erreur est déclenchée par la ligne suivante du switch/case de la fonction activerCibles() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    form.cibles['francais'].disabled='false';

  3. #3
    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
    form.cibles['francais'].disabled='false';
    la propriété disabled est un booléen, mais tu lui passes une chaine
    Ceci dit, form fait partie du langage, l'utiliser comme nom de variable, de champ ou autre est plus que déconseillé !
    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

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 214
    Par défaut
    Merci Bovino.

    J'ai corrigé le nom du formulaire et les booléens de cette manière (je ne mets qu'une ligne) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    function activerCibles(formulaire,inputName,source) {
     
    [...]
     
    formulaire.cibles['francais'].disabled=false;
     
    [...]
     
    }
    mais cela ne change rien, j'ai toujours le même message d'erreur : 'cibles.francais' a la valeur Null ou n'est pas un objet

  5. #5
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function activerCibles(formulaire,source) {
    	var disabl = false;
    	if(source=='francais'){
    		disabl = true;
    	}
    	for(var i=0; i<formulaire.elements['cibles[]'].length;i++){
    		if(formulaire.elements['cibles[]'][i].value=='francais'){
    			formulaire.elements['cibles[]'][i].disabled=disabl;
    		}else{
    			formulaire.elements['cibles[]'][i].disabled= (!disabl);
    		}
    	}
    }
    A+.

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var inputs = form.elements[inputName];
    Donc inputs est une collection d'objets HTML.
    input (nom pas terrible non plus ) est donc aussi une collection
    une collection n'a pas de value !

    En fait, tu as juste oublié de préciser le rang de l'input :
    Et au passage, déclarer une variable dans une boucle n'est pas très propre, il est préférable de la déclarer en début de fonction
    puis juste de faire des affectations dans la boucle
    Mais bon, la solution d'andry est pas mal
    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

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

Discussions similaires

  1. Activer/désactiver des fonctionnalités
    Par pdfmaker dans le forum Général Java
    Réponses: 3
    Dernier message: 10/06/2009, 11h33
  2. Activer/désactiver des fonctionnalités
    Par pdfmaker dans le forum Architecture
    Réponses: 1
    Dernier message: 28/03/2009, 13h53
  3. Activation - désactivation des macros
    Par olivepao dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 10/07/2008, 12h55
  4. Activer / désactiver des périphériques
    Par adage2000 dans le forum MFC
    Réponses: 3
    Dernier message: 28/04/2005, 16h51

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