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 ajouter un �couteur dynamiquement


Sujet :

JavaScript

  1. #1
    Membre �clair�
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    354
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 354
    Par d�faut comment ajouter un �couteur dynamiquement
    Bonjour ,

    J'ai besoin de permettre � des utilisateurs d'entrer des donn�es :

    L'utilisateur s�lectionne un cours dans une liste de choix un �v�nement de type onchange est li� � cette liste
    la valeur s�lectionn�e est envoy�e par une requ�te Ajax au serveur.
    Le serveur me retourne un ensemble de chapitre corepondant au cours que j'ins�re dans une nouvelle liste.
    Sur cette nouvelle liste , j'ai toujours un listener onchange c'�tzit pour vous expliquer en gros ce que je veux faire.

    Quand je re�ois mes requ�tes, j'utilise une fonction writeDiv pour cr�er ma liste de choix.Et je lui associe un listener par la partie en gras :
    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
    function writeDiv(tab)
           {
               var monTableau = new Array() ;
                               
                       var indice = monTableau.length-1 ;
                       monTableau[indice] = "nouveau dossier" ;
                       
               // R�cuperer les positions
                  var selection = document.getElementById("select1") ;
               var formulaire = document.getElementById("monFormulaire");
               var monRepere = document.getElementById("repere") ;
               var bouton = document.getElementById("selectionnez") ;
                var nouveauSelect = document.createElement("select") ;
               
              
               nouveauSelect.size = "1" ;
                   for (var i=0;i<monTableau.length;i++)
           {
                   op = new Option(monTableau[i],"",false,false) ;
               nouveauSelect.options.add(op) ;         
               
           }
           formulaire.insertBefore(nouveauSelect,monRepere) ;
           alert ("je sors de la fonction writeDiv() ") ;
               
               nouveauSelect.addEventListener('change',recupererValue,false);                    
           }
    Lorsque la nouvelle liste est cr��e je fais appel � une fonction recupererValue
    qui ma me r�cup�rer la valeur s�lectionn�e et lancer la fonction EnvoyerChoxUtilisateurs().
    Voici 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
    function recupererValue(select)
        {
            alert ("D�but de la fonction recupererValue");
            alert (select) ;
    if (!confirm("Voulez vous continuer ?"))
        {
    var monSelect = select ;
    //var maValeur = monSelect.options.[monSelect.selectedIndex].value ;
    var maValeur = monSelect.value ;
    alert (maValeur) ; // A ce niveau j'obtiens undefinedEnvoyerChoixUtilisateurs(maValeur) ;
    }
    else {
        alert("Vous avez d�cid� d'arreter") ;
    }
    }
    J'ai plusieurs questions :

    Je dois relancer plusieurs fois la m�me fonction writeDiv comment faire pour qu'� chaque fois cette fonction me donne un identifiant unique pour le select qu'il cr�e.

    2) Pour passer d'un �l�ment � un objet de type DOM il me suffit de faire getElementById par contre si j'ai un objet de type DOM comment passer � un �l�ment je ne sais pas si c'est tr�s clair.

    J'ai encore d'autres questions mais je serai d�j� tr�s content d'avancer sur ces deux probl�mes.

    Merci d'avance pour votre aide.

  2. #2
    R�dacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 45
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par d�faut
    effectivement c'est pas toujours super clair ce que tu racontes

    commen�ons par le commencement:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    // marche partout sauf sur IE
    nouveauSelect.addEventListener('change',recupererValue,false);
     
    // spécial IE
    nouveauSelect.attachEvent('onchange',recupererValue);
    ta callback recupererValue l�, tu ne lui passes jamais le select en entr�e. ce qu'elle a en entr�e c'est soit rien (pour IE), soit l'�v�nement (pour les autres navigateurs). donc quand tu tentes:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function recupererValue(select)
    {
    ...
      alert (select) ; // la c'est l'objet événement que tu affiches, pas le select
    ...
      var monSelect = select ; // tu manipules toujours l'événement
      var maValeur = monSelect.value ; // équivalent "var maValeur = undefined"
      // parce que l'event n'a pas de propriété value
      alert (maValeur) ; // A ce niveau j'obtiens undefined => CQFD
      EnvoyerChoixUtilisateurs(maValeur) ;
      ...
    }
    alors comment r�cup�rer le select ?
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function toto(e){
      // le select a déclencher l'event ?
      var evt = window.event || e;
      var select = evt.target || evt.srcElement; // voilà ton select ;)
     
      // ce n'es pas le select qui déclenche l'événement ?
      var select = document.getElementById("idselect");
     
      // ou l'élément qui déclenche l'action a une référence sur le select ?
      var o = evt.target || evt.srcElement;
      var select = o.referenceSurSelect;
      // par exemple à la création du select tu avais aussi créé un bouton
      // et tu as fait monBouton.referenceSurSelect = monSelect
      // (c'est un pointeur quoi)
    Q : comment faire pour qu'� chaque fois cette fonction me donne un identifiant unique pour le select qu'il cr�e.

    R : met un compteur que tu incr�mentes � chaque cr�ation
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var cpt = 0;
     
    function creationDiv()
    {
     ...
     newDic.id = "toto" + cpt;
     cpt++;
     ...
    }

  3. #3
    Membre �clair�
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    354
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 354
    Par d�faut
    Merci d'abord pour avoir fait l'effort de me comprendre,tu m'as donn� de super pistes.
    je vais les explorer et je me permettrai de te demander des pr�cisions demain.


    Encore Merci

  4. #4
    Membre �clair�
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    354
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 354
    Par d�faut
    Bonjour ,
    J'ai encore besoin d'aide.

    Ma premi�re question est la suivante :
    Quand je remplis ma liste pour la liste de choix j'utilise :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
     for (var i=0;i<monTableau.length;i++)
           {
                   op = new Option(monTableau[i],"",false,false) ;
                   nouveauSelect.options.add(op) ;      
           }
    Mais est ce que ce code me remplit aussi le value de
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    <option value=? > ...</option>
    parce que quand j'essaie de recup�rer value jobtiens "null".
    Sinon comment affecter une value � mes options.

    Merci de votre aide

  5. #5
    R�dacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 45
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077

  6. #6
    Membre �clair�
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    354
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 354
    Par d�faut
    Merci beaucoup,
    Voil� donc pourquoi je n'arrivais pas � r�cup�rer de value.
    Mais j'ai une deuxi�me question :

    Pour attacher un �v�nement au select que je viens de cr�er j'utilise :

    // marche partout sauf sur IE
    nouveauSelect.addEventListener('change',recupererValue,false);

    // sp�cial IE
    nouveauSelect.attachEvent('onchange',recupererValue);
    Mais moi en plus je pensais transmettre le nom de mon nouveau select en argument de ma fonction recupererValue est ce possible ? dans ce cas comment faire.
    => Ce que j'ai compris des explications que tu m'as donn� c'est que c'est pas possible mais que la fonction recupererValue prend par defaut un objet event en argument charge � moi de remonter jusqu'� la source qui a d�clench� l'�v�nement par un :
    var evt = window.event || e;
    var select = evt.target || evt.srcElement;
    Est ce que j'ai bien compris ou bien je suis � cot� de la plaque ?

    Merci

  7. #7
    R�dacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 45
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par d�faut
    tu as bien compris.
    maintenant tu peux aussi faire
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    nouveauSelect.addEventListener('change',function(event){recupererValue(nouveauSelect);},false);

  8. #8
    Membre �clair�
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    354
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 354
    Par d�faut
    Merci de ta r�ponse et surtout de ta patience � chaque fois que je pose une question j'ai l'impression que je me faire en***, mais encore une fois merci de ta patience.Je vais refaire des tests et je me permettrai de te poser des questions sur ce que je n'ai pas compris.

    Merci

Discussions similaires

  1. [lablgtk2] comment ajouter des widget dynamiquement?
    Par amiroushka dans le forum Caml
    R�ponses: 4
    Dernier message: 06/11/2009, 21h21
  2. R�ponses: 3
    Dernier message: 23/04/2007, 13h14
  3. R�ponses: 3
    Dernier message: 05/11/2006, 11h42
  4. [C#] Comment ajouter un item dynamiquement
    Par Tercan dans le forum ASP.NET
    R�ponses: 5
    Dernier message: 03/11/2006, 23h17
  5. R�ponses: 1
    Dernier message: 19/08/2006, 19h40

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