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 :

Comment lire un "name" d'un menu déroulant ?


Sujet :

JavaScript

  1. #1
    Membre actif
    Avatar de jlb59
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2004
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2004
    Messages : 1 022
    Points : 243
    Points
    243
    Par défaut Comment lire un "name" d'un menu déroulant ?
    Bonjour à tous,

    Je ne comprends pas trop le php et par sécurité, j'utilise et adapte des exemples récupérés à droite et à gauche.

    Il y a qq temps, Julp (ProgOtoP) m'avait donné l'astuce pour détecter la valeur sur une sélection de plusieurs boutons radios.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <input type="Radio" name="moteur" value="Moteur"> Moteur de recherche<br />
    <input type="Radio" name="moteur" value="Lien"> Lien de site<br />
    <input type="Radio" name="moteur" value="Relation"> Relation<br />
    Ca fonctionne très bien, mais je voulais savoir comment faire pour un menu déroulant.
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <select name="motif">
    	<option value="">--- Votre choix ---</option>
    	<option value="renseignements"> Renseignements</option>
    	<option value="support_technique"> Support Technique</option>
    	<option value="lien_mort"> Lien Mort</option>
    	<option value="partenariat"> Partenariat</option>
    </select>
    Je demande ça parce que je n'arrive pas à détecter le menu déroulant.

    Comme c'est pour un contact, se serait bien de pouvoir le faire avec ça, sinon, il faudrait que je refasse des boutons radio... et c'est pas très convivial !

    Pourriez-vous m'aider ?

    Merci d'avance.

    Cordialement, JLB59

  2. #2
    Membre éclairé Avatar de haltabush
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    726
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 726
    Points : 835
    Points
    835
    Par défaut
    Qu'appelle tu "détecter"?
    Si tu fait un $_POST['modif'], tu devrais récupérer la valeur de l'option sélectionnée, mai sbon je ne susi pas sûr que ce soit ça que tu veux

  3. #3
    Membre actif
    Avatar de jlb59
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2004
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2004
    Messages : 1 022
    Points : 243
    Points
    243
    Par défaut
    Citation Envoyé par haltabush
    Qu'appelle tu "détecter"?
    Si tu fait un $_POST['modif'], tu devrais récupérer la valeur de l'option sélectionnée, mai sbon je ne susi pas sûr que ce soit ça que tu veux
    Le mieux je pense est que je mette le script pour la détaction
    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
    52
    53
    54
    <script language="JavaScript" type="text/javascript">
    <!--
    function formCheck(formobj){
    	var fieldRequired = Array("nom", "mail", "profession", "moteur", "precision", "motif", "sujet", "message");
    	var fieldDescription = Array("Votre nom", "Votre mail", "Votre profession", "Comment avez-vous connu ce site", "Précisez", "Motif choisi", "Sujet du message", "Votre message");
    	var alertMsg = "Veuillez compléter les champs suivants qui sont obligatoires avant d'envoyer!\n";
     
    	var l_Msg = alertMsg.length;
     
    	for (var i = 0; i < fieldRequired.length; i++){
    		var obj = formobj.elements[fieldRequired[i]];
    		if (obj){
    			switch(obj.type){
    			case "select-one":
    				if (obj.selectedIndex == -1 || obj.options[obj.selectedIndex].text == ""){
    					alertMsg += " - " + fieldDescription[i] + "\n";
    				}
    				break;
    			case "select-multiple":
    				if (obj.selectedIndex == -1){
    					alertMsg += " - " + fieldDescription[i] + "\n";
    				}
    				break;
    			case "text":
    			case "textarea":
    				if (obj.value == "" || obj.value == null){
    					alertMsg += " - " + fieldDescription[i] + "\n";
    				}
    				break;
    			default:
    			}
    			if (obj.type == undefined){
    				var blnchecked = false;
    				for (var j = 0; j < obj.length; j++){
    					if (obj[j].checked){
    						blnchecked = true;
    					}
    				}
    				if (!blnchecked){
    					alertMsg += " - " + fieldDescription[i] + "\n";
    				}
    			}
    		}
    	}
     
    	if (alertMsg.length == l_Msg){
    		return true;
    	}else{
    		alert(alertMsg);
    		return false;
    	}
    }
    // -->
    </script>
    Ne me demande pas d'explication sur ça parce que je n'y comprends pas grand-chose, mais ça marche, pour les btn radio en tout cas.

    Pour le formulaire il y a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <form method="post" action="./index.php?page=9&amp;id=Result_Contact" name="formcheck" onsubmit="return formCheck(this);">
    Je mets pas le reste because c'est simplement les champs.
    Mais il y a une partie des champs cités dans mon précédent post (boutons radio et select (pour le menu déroulant).

    Ton astuce me semble très bien mais je ne crois pas être suffisamment performant pour l'adapter.

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 415
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 415
    Points : 15 784
    Points
    15 784
    Par défaut
    tu veux autoriser l'envoi du formulaire seulement si une valeur à été choisie dans le menu déroulant, c'est ça ?

  5. #5
    Membre actif
    Avatar de jlb59
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2004
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2004
    Messages : 1 022
    Points : 243
    Points
    243
    Par défaut
    Citation Envoyé par mathieu
    tu veux autoriser l'envoi du formulaire seulement si une valeur à été choisie dans le menu déroulant, c'est ça ?
    C'est exactement ce que je voudrais faire.

    J'aurais du faire cette précision dès le départ, non ?

  6. #6
    Membre éclairé Avatar de haltabush
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    726
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 726
    Points : 835
    Points
    835
    Par défaut
    Oui
    Et du coup, c'est du Javascript et pas du PHP.

    edit :
    je pense avoir trouvé le truc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    case "select-one":
    				if (obj.selectedIndex == -1 || obj.options[obj.selectedIndex].TEXT == ""){
    					alertMsg += " - " + fieldDescription[i] + "\n";
    				}
    				break;
    doit devenir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    case "select-one":
    				if (obj.selectedIndex == -1 || obj.options[obj.selectedIndex].VALUE == ""){
    					alertMsg += " - " + fieldDescription[i] + "\n";
    				}
    				break;
    Ceci dit, ça change totalement le comportement de la fonction : au lieu d'afficher un message d'alerte si l'utilisateur fait un choix où il n'y a pas de texte, elle l'affichera seulement si l'option est vide... Il faut voir si tu as d'autres select où le comportement de la fonction ne doit pas changer.
    Tiens nous au courant...

  7. #7
    Membre actif
    Avatar de jlb59
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2004
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2004
    Messages : 1 022
    Points : 243
    Points
    243
    Par défaut
    Citation Envoyé par haltabush
    Oui
    Et du coup, c'est du Javascript et pas du PHP.

    edit :
    je pense avoir trouvé le truc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    case "select-one":
    				if (obj.selectedIndex == -1 || obj.options[obj.selectedIndex].TEXT == ""){
    					alertMsg += " - " + fieldDescription[i] + "\n";
    				}
    				break;
    doit devenir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    case "select-one":
    				if (obj.selectedIndex == -1 || obj.options[obj.selectedIndex].VALUE == ""){
    					alertMsg += " - " + fieldDescription[i] + "\n";
    				}
    				break;
    Ceci dit, ça change totalement le comportement de la fonction : au lieu d'afficher un message d'alerte si l'utilisateur fait un choix où il n'y a pas de texte, elle l'affichera seulement si l'option est vide... Il faut voir si tu as d'autres select où le comportement de la fonction ne doit pas changer.
    Tiens nous au courant...
    Le Javascript en question est dans une page Php.
    En fait, c'est une page Html, mais comme elle est appelée à partir d'une page Php !... De plus, je ne voulais pas m'emmêler les pinceaux, aussi, j'ai tout mis en Php.

    Je ne savais pas exactement où poster parce que le script en question a é"té récupéré dans un forum, je ne sais plus lequel, où il y avait des T&A pour le Php, et c'est là que je l'ai pris.

    Pour en revenir à ta réponse, tous les champs sont obligatoires. Il n'y en a pas beaucoup :
    • Nom
    • Mail
    • Profession
    • Méthode de recherche (c'est les btn radio)
    • Nom du moteur
    • Rubrique choisie (c'est le menu)
    • Sujet du message
    • Message

    Le test pour voir si tous les champs sont remplis fonctionne sauf pour le menu.
    Ton script ferait ça aussi sans précision ?

    Il est vrai que ton script est nettement plus court et c'est parfait , mais ton code est à mettre à la place de "<script language="JavaScript">
    <!--
    function formCheck(formobj){.....
    " ?

    Je demande ça parce que je suis franchement perdu ! Vu la longueur du script que j'aie et ce que tu m'a donnée ???

    Actuellement, quand un champ n'est pas rempli (sauf le menu déroulant), une boîte d'alerte dit quel est le champ qui n'a pas été saisi.
    Tu me suis ?

    Mais avec ton code, on peut faire pareil en le modifiant un peu ?

    Si tu as le temps, va à cette adresse pour voir le fonctionnement http://www.qi98.fr/contact.php tu verras que tous les champs sont testés sauf le menu.

  8. #8
    Membre éclairé Avatar de haltabush
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    726
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 726
    Points : 835
    Points
    835
    Par défaut
    On ne s'est pas bien compris. Si mon script est plus court, c'est parce que... c'est un morceau de l'autre
    Dans ton script, tu dois remplacer ce qui correspond à mon 1er bout de script par mon 2ème bout de script

  9. #9
    Membre actif
    Avatar de jlb59
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2004
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2004
    Messages : 1 022
    Points : 243
    Points
    243
    Par défaut
    Citation Envoyé par haltabush
    On ne s'est pas bien compris. Si mon script est plus court, c'est parce que... c'est un morceau de l'autre
    Dans ton script, tu dois remplacer ce qui correspond à mon 1er bout de script par mon 2ème bout de script
    Ca y est, j'ai enfin compris.

    Maintenant je vois, je n'avais pas fait le rapprochement avec le script existant.

    J'ai essayé ta solution, et apparamment tout marche pour le mieux.

    C'est un essai en local, mais je suppose que sur le web, ce sera la même chose !

    En tout cas, merci beaucoup de ces informations.

    A bientôt.

    Cordialement, JLB59

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

Discussions similaires

  1. [AC-2000] lire la saisie en cours dans un menu déroulant
    Par nico84 dans le forum IHM
    Réponses: 2
    Dernier message: 03/05/2012, 19h12

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