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 :

[Débutant] Affichage ou non de parties d'une page selon élément d'un select


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 36
    Points : 30
    Points
    30
    Par défaut [Débutant] Affichage ou non de parties d'une page selon élément d'un select
    Bonjour à tous,
    N'étant pas du tout expert en javascript, je cherche le moyen de changer mon affichage selon l'élément que je sélectionne dans un select.

    J'ai essayé en faisant quelque chose comme ça :

    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
    38
    <select onchange="
    	if(this.options[this.selectedIndex].text == 'zone de texte' || this.options[this.selectedIndex].text == 'champs de texte')
    	{
    		document.getElementById('reponses').style.display = 'none';
    		document.getElementById('question_suivante').style.display = 'block';
    	}
    	else
    	{
    		if(this.options[this.selectedIndex].text == 'cases &agrave; cocher')
    		{
    			document.getElementById('rep_question_suivante').style.display = 'none');
    			document.getElementById('question_suivante').style.display = 'block';
    		}
    		else
    		{
    			document.getElementById('rep_question_suivante').style.display = 'block');
    			document.getElementById('question_suivante').style.display = 'none';
    		}
    		document.getElementById('reponses').style.display = 'block';
    	}
    ">
    	<option value="boutons radio">boutons radio</option>
    	<option value="cases &agrave; cocher">cases &agrave; cocher</option>
    	<option value="zone de texte">zone de texte</option>
    	<option value="champs de texte">champs de texte</option>
    	<option value="liste d&eacute;roulante">liste d&eacute;roulante</option>
    </select>
     
     
    <div id="question_suivante">
    ...
    </div>
     
    <div id="reponses">
    	<div id="rep_question_suivante">
    	...
    	</div>
    </div>
    Le soucis c'est que si j'ai un if-else simple, ça fonctionne. Mais dès que je concatène une autre condition à l'intérieur, ça ne réagit plus.
    J'ai également tenté en bricolant avec un switch, mais pareil, ça ne fait rien.

    J'imagine que ce n'est pas grand chose. Donc, si quelqu'un a une idée... Merci à celui qui aura le courage de la taper ici.

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 670
    Points
    66 670
    Billets dans le blog
    1
    Par défaut
    heu déja commence par externaliser la fonction dasn le head de la page et appelle la dans le onchange
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 36
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    heu déja commence par externaliser la fonction dasn le head de la page et appelle la dans le onchange
    Dans ce cas,

    L'entête :
    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
    <script type="text/javascript">
    	<!--
    	function SelectQuest(textSelected)
    	{
    		if(textSelected == 'zone de texte' || textSelected == 'champs de texte')
    		{
    			document.getElementById('reponses').style.display = 'none';
    			document.getElementById('question_suivante').style.display = 'block';
    		}
    		else
    		{
    			if(textSelected == 'cases &agrave; cocher')
    			{
    				document.getElementById('rep_question_suivante').style.display = 'none');
    				document.getElementById('question_suivante').style.display = 'block';
    			}
    			else
    			{
    				document.getElementById('rep_question_suivante').style.display = 'block');
    				document.getElementById('question_suivante').style.display = 'none';
    			}
    			document.getElementById('reponses').style.display = 'block';
    		}
    	}
    	//-->
    </script>
    Le corps :
    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
    // Liste déroulante
    <select onchange="SelectQuest(this.options[this.selectedIndex].text);">
    	<option value="boutons radio">boutons radio</option>
    	<option value="cases &agrave; cocher">cases &agrave; cocher</option>
    	<option value="zone de texte">zone de texte</option>
    	<option value="champs de texte">champs de texte</option>
    	<option value="liste d&eacute;roulante">liste d&eacute;roulante</option>
    </select>
     
    // Eléments à afficher ou pas
    <div id="question_suivante">
    ...
    </div>
     
    <div id="reponses">
    	<div id="rep_question_suivante">
    	...
    	</div>
    </div>

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 670
    Points
    66 670
    Billets dans le blog
    1
    Par défaut
    Ha be voilà qui est déja beaucoup plus clair ...

    text n'est pas crossbrowser ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SelectQuest(this.options[this.selectedIndex].innerHTML)
    sinon pourquoi pas le value ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 36
    Points : 30
    Points
    30
    Par défaut
    Merci pour le innerHTML.

    Reste que ça n'a pas changé.

    Sinon, le value... ben oui, pourquoi pas.

    Ca donnerait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onchange="SelectQuest(this.options[this.selectedIndex].value);
    ?

    Pour tester de votre côté, une version simplifiée de mon code :
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    <html>
    <head>
    <script type="text/javascript">
    	<!--
    	function SelectQuest(textSelected)
    	{
    		if(textSelected == 'zone de texte' || textSelected == 'champs de texte')
    		{
    			document.getElementById('reponses').style.display = 'none';
    			document.getElementById('question_suivante').style.display = 'block';
    		}
    		else
    		{
    			if(textSelected == 'cases &agrave; cocher')
    			{
    				document.getElementById('rep_question_suivante').style.display = 'none');
    				document.getElementById('question_suivante').style.display = 'block';
    			}
    			else
    			{
    				document.getElementById('rep_question_suivante').style.display = 'block');
    				document.getElementById('question_suivante').style.display = 'none';
    			}
    			document.getElementById('reponses').style.display = 'block';
    		}
    	}
    	//-->
    </script>
    </head>
    <body>
     
    <select onchange="SelectQuest(this.options[this.selectedIndex].value);">
    	<option value="boutons radio">boutons radio</option>
    	<option value="cases &agrave; cocher">cases &agrave; cocher</option>
    	<option value="zone de texte">zone de texte</option>
    	<option value="champs de texte">champs de texte</option>
    	<option value="liste d&eacute;roulante">liste d&eacute;roulante</option>
    </select>
     
    <div id="question_suivante">
    Contenu à afficher si 'cases &agrave; cocher' ou 'zone de texte' ou 'champs de texte' est sélectionné
    </div>
     
    <div id="reponses">
    	Contenu à afficher si 'boutons radio' ou 'liste déroulante' ou 'cases &agrave; cocher' est sélectionné
    	<div id="rep_question_suivante">
    	Contenu à n'afficher que si 'boutons radio' ou 'liste déroulante' est sélectionné
    	</div>
    </div>
    </body>
    </html>

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 670
    Points
    66 670
    Billets dans le blog
    1
    Par défaut
    le style display n'est pas initialisé dasn le div
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 36
    Points : 30
    Points
    30
    Par défaut
    Mmm oui, c'est à dire ?

    J'ai essayé d'ajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <style type="text/css" media="screen">
    	#reponses {
    		display: none;
    	}
    	#question_suivante {
    		display: none;
    	}
    	#rep_question_suivante {
    		display: none;
    	}
    </style>
    ... dans l'entête, mais apparemment ce n'est pas encore ça.

  8. #8
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 670
    Points
    66 670
    Billets dans le blog
    1
    Par défaut
    y'a juste deux ) en trop dans ton code ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 36
    Points : 30
    Points
    30
    Par défaut
    Ah mais oui !

    Pour résumer :
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    <html>
    <head>
    <script type="text/javascript">
    	<!--
    	function SelectQuest(textSelected)
    	{
    		if(textSelected == 'zone de texte' || textSelected == 'champs de texte')
    		{
    			document.getElementById('reponses').style.display = 'none';
    			document.getElementById('question_suivante').style.display = 'block';
    		}
    		else
    		{
    			if(textSelected == 'cases &agrave; cocher')
    			{
    				document.getElementById('rep_question_suivante').style.display = 'none';
    				document.getElementById('question_suivante').style.display = 'block';
    			}
    			else
    			{
    				document.getElementById('rep_question_suivante').style.display = 'block';
    				document.getElementById('question_suivante').style.display = 'none';
    			}
    			document.getElementById('reponses').style.display = 'block';
    		}
    	}
    	//-->
    </script>
    </head>
    <body>
     
    <select onchange="SelectQuest(this.options[this.selectedIndex].value);">
    	<option value="boutons radio">boutons radio</option>
    	<option value="cases &agrave; cocher">cases &agrave; cocher</option>
    	<option value="zone de texte">zone de texte</option>
    	<option value="champs de texte">champs de texte</option>
    	<option value="liste d&eacute;roulante">liste d&eacute;roulante</option>
    </select>
     
    <div id="question_suivante">
    Contenu à afficher si 'cases &agrave; cocher' ou 'zone de texte' ou 'champs de texte' est sélectionné
    </div>
     
    <div id="reponses">
    	Contenu à afficher si 'boutons radio' ou 'liste déroulante' ou 'cases &agrave; cocher' est sélectionné
    	<div id="rep_question_suivante">
    	Contenu à n'afficher que si 'boutons radio' ou 'liste déroulante' est sélectionné
    	</div>
    </div>
    </body>
    </html>
    ... ça marche.

    Merci SpaceFrog pour ton aide et tes réponses en jeu de piste ^^.

  10. #10
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 670
    Points
    66 670
    Billets dans le blog
    1
    Par défaut
    Je considère que te donner la solution toute faite ne te fera pas progresser.
    TU as peut être perdu un peu de temsp cette fois ci, mais au moins tu as assimilé la solution ...
    Du moins je l'espère
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 36
    Points : 30
    Points
    30
    Par défaut
    J'ai mis ça en résolu trop tôt.

    Petit soucis que je n'avais pas relevé : si l'utilisateur actualise sa page.
    Le champs de la liste sélectionné ne change pas alors que les div apparaissent selon les paramètres initiaux.

    Il n'y aurait pas un moyen pour que l'affichage des éléments de la liste se réinitialise avec l'actualisation (en sélectionnant le premier élément) ou, au contraire, que les div ne se réinitialisent pas à chaque rafraichissement ?

  12. #12
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 670
    Points
    66 670
    Billets dans le blog
    1
    Par défaut
    un petit script dasn le onload de la page
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 36
    Points : 30
    Points
    30
    Par défaut
    Merci, cette fois je pense que c'est bon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    window.onload = function()
    {
    	document.getElementById('type').selectedIndex = 0;
    };
    Après, je ne sais pas si c'est correctement écrit. J'ai mis ça tel quel dans l'entête de la page avec les autres fonctions.

  14. #14
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 670
    Points
    66 670
    Billets dans le blog
    1
    Par défaut
    c'est un façon de faire ...

    tu aurais pu avoir ta fonction dans le head et l'appeler dans le onload de la balise body
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

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

Discussions similaires

  1. Réponses: 16
    Dernier message: 29/04/2008, 10h55
  2. Affichage d'un tableau perl dans une page HTML
    Par Jim_Nastiq dans le forum Web
    Réponses: 7
    Dernier message: 13/04/2006, 11h27
  3. [MySQL] Actualiser une partie d'une page
    Par zoom61 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 31/03/2006, 12h18
  4. Récupérer une partie d'une page php d'un autre site
    Par 73qro dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 01/03/2006, 17h22
  5. Afficher/Cacher une partie d'une page
    Par frechy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 12/01/2006, 14h18

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