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 :

addEventListener liste déroulante


Sujet :

JavaScript

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2018
    Messages : 4
    Points : 2
    Points
    2
    Par défaut addEventListener liste déroulante
    Bonjour à tous !

    Je suis entrain de faire projet en JS perso et j'ai un petit problème.

    Je suis sur des menus déroulants en cascade.
    Le premier appel le deuxième lui donner des données tout vas bien.
    Mais en faite j'aimerais avoir les données quand je selectionne une option dans le deuxième menu déroulant.

    Le problème étant quand je change de sélection il me donne les infos de toutes options.

    Un peu compliqué a expliquer mais voici un bout de code sur l'image sous dessous.
    Si besoins je peux expliquer plus dans les commentaires.
    Mon site est hébergé si jamais vous voulez en voir un peu plus ou voir les logs.

    Merci de votre aide !



    Nom : Capture.PNG
Affichages : 1153
Taille : 26,5 Ko

  2. #2
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut


    On ne peut rien faire avec une image ! On ne peut pas tester un problème sans les codes (HTML, CSS, JS).

    Vous devez poster une copie du code source de la page web, le bouton # de l'éditeur placera des balises .

    Vous pouvez aussi fournir un lien vers la page web.

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2018
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Rebonjour,

    Voici le lien du site : http://floriandjerbi.fr/wow/index.html

    Vous pouvez voir sur le site, lors d'un changement de la 2ème liste dans la consol,e je reçoit toute les infos de tous les serveur et non pas de celui sélectionner.

    En soit il n'y a rien sur le html et le css.
    Je vous met le code JS juste à la suite.





    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
    const serveurListe = document.getElementById("serveur");
     
    function serveursAjout(serv){
    	serveurListe.innerHTML = "";
     
    	var rien = document.createElement("option");
    	rien.value = "rien";
    	rien.innerHTML = "-- Choix du serveur --";
    	serveurListe.appendChild(rien);
     
    	for(var i = 0; i < serv.length; i++){
    		const options = document.createElement("option");
    		options.innerHTML = serv[i][2];
    		options.info = new test(serv[i][0], serv[i][1], serv[i][2], serv[i][3], serv[i][4]);
    		serveurListe.appendChild(options);
    		serveurListe.addEventListener("change", options.info.toggleMarker.bind(options.info));
    	}
    }
     
     
     
    class test{
    	constructor(type, population, name, locale, status){
    		this.type = type;
    		this.population = population;
    		this.name = name;
    		this.locale = locale;
    		this.status = status;
    	}
     
    	toggleMarker(info){
    		console.log(this.type + " " + this.population + " " + this.name);
    	}
    }
    Merci à vous de votre aide.

  4. #4
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    J'ai récupérer la totalité des vos codes sur le lien et j'ai commencé à les tester, mais je m'arrête, car il a trop d'erreurs signalées dans la console (F12).

    Je vous conseille de commencer tous vos codes avec 'use strict'; en première instruction de vos fichiers JS.

    Vous allez alors voir des messages d'erreurs dans la console, plusieurs variables ne sont pas déclarées. Je vous conseille de bannir var et de la remplacer par let ou const.

    Dans la fonction ajaxGet() serv n'est pas déclaré et utilisé d'une manière qui me laisse dubitatif :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (let i = 0; i < detail.length; i++) {
      serv = new serveur(detail[i]);
    };
    Tous les objets serv créés ne sont stockés nulle part et rattacher à rien. ou alors il faut écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (let i = 0; i < detail.length; i++) {
      new serveur(detail[i]);
    };
    Lorsque vous aurez corrigé toutes les erreurs, merci de mettre en ligne le résultat et de poster un nouveau message.

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  5. #5
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2018
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonsoir,

    Merci bien des conseils j'ai encore beaucoup de chose à apprendre.

    Je vais essayer de régler un peu les problèmes que vous m'avez déjà demandé de faire.
    Je vais aussi me renseigner sur la différence entre "use strict" et "non strict pareil pour "let" et "const".


    Avez vous du coup un peu mon problème de addEventListener ?



    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 serveursAjout(serv){
    	serveurListe.innerHTML = "";
     
    	let rien = document.createElement("option");
    	rien.value = "rien";
    	rien.innerHTML = "-- Choix du serveur --";
    	serveurListe.appendChild(rien);
     
    	for(let i = 0; i < serv.length; i++){
    		const options = document.createElement("option");
    		options.innerHTML = serv[i][2];
    		options.info = new test(serv[i][0], serv[i][1], serv[i][2], serv[i][3], serv[i][4]);
    		serveurListe.appendChild(options);
    		serveurListe.addEventListener("change", options.info.toggleMarker.bind(options.info));
    	}
    }
     
     
     
    class test{
    	constructor(type, population, name, locale, status){
    		this.type = type;
    		this.population = population;
    		this.name = name;
    		this.locale = locale;
    		this.status = status;
    	}
     
    	toggleMarker(info){
    		console.log(this.type + " " + this.population + " " + this.name);
    	}
    }

    J'ai bien changé les problèmes.
    Je ne vois pas vraiment de différences mais surement du coter optimisation cela est mieux.


    Merci de votre patience et de votre aide.

  6. #6
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    C'est mieux ! Moi et la console ont voit des différences.

    Code à corrigé :

    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
    function serveursAjout(serv) {
        serveurListe.innerHTML = "";
     
        let rien = document.createElement("option");
        rien.value = "rien";
        rien.innerHTML = "-- Choix du serveur --";
        serveurListe.appendChild(rien);
     
        for (let i = 0; i < serv.length; i++) {
            let options = document.createElement("option");
     
            options.innerHTML = serv[i][2];
            options.info = new test(serv[i][0], serv[i][1], serv[i][2], serv[i][3], serv[i][4]);
     
            serveurListe.appendChild(options);
        }
     
        serveurListe.addEventListener("change", ev => {
            let arOptions = Array.from(ev.target.options);
     
            for (const [i, option] of arOptions.entries()) {
                // le premier élément, i = 0, est undefined !
     
                if (i > 0) {
                    let oTest = option.info;
     
                    console.log('***** i = ' + i + ' *****');
                    console.log(`name = ${ oTest.name }`);
                    console.log(`type = ${ oTest.type }`);
                    console.log(`locale = ${ oTest.locale }`);
                    console.log(`population = ${ oTest.population }`);
                    console.log(`status = ${ oTest.status }`);
                }
            }
        });
    }

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

Discussions similaires

  1. valeur d'une liste déroulante
    Par leeloo076 dans le forum ASP
    Réponses: 7
    Dernier message: 15/04/2004, 16h11
  2. liste déroulante
    Par leeloo076 dans le forum ASP
    Réponses: 12
    Dernier message: 23/03/2004, 10h35
  3. liste déroulante avec session
    Par leeloo076 dans le forum ASP
    Réponses: 3
    Dernier message: 19/03/2004, 11h01
  4. liste déroulante en ASP vbscript
    Par leeloo076 dans le forum ASP
    Réponses: 9
    Dernier message: 17/03/2004, 16h42
  5. Listes déroulantes liées entre elles
    Par denisC dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 27/07/2002, 15h53

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