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 :

Recupération d'id à la volée


Sujet :

JavaScript

  1. #1
    Membre éclairé
    Homme Profil pro
    Analyste développeur
    Inscrit en
    Juin 2010
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste développeur

    Informations forums :
    Inscription : Juin 2010
    Messages : 317
    Par défaut Recupération d'id à la volée
    Bonsoir,

    Dans une page php, je génère des balises <a> qui ont un id qui s'incrémente automatiquement, selon le résultat du nombre de ligne de la base de données.

    id1
    id2
    etc...

    J'aimerais appliquer l'évènement onclick en JavaScript, sur chaque nouveau lien créé. J'ai fais comme ceci, dans l’événement window.onload de la page, mais ça ne marche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var k = 0;
    while (document.getElementById("group" + k)) {
    	if (document.getElementById("group" + k)) {
    		document.getElementById("group" + k).onclick = function() {
    			alert(this.id);
    		}
    	}
    	k++;
    }
    Pouvez vous m'aider ?

    John.

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 209
    Par défaut
    Bonsoir,
    tu as d'un coté des id1, id2... et de l'autre tu cherches des group1... ????

    une question
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while(document.getElementById("group" + k)) {
      if (document.getElementById("group" + k)) {// pourquoi ce TEST ?

  3. #3
    Membre éclairé
    Homme Profil pro
    Analyste développeur
    Inscrit en
    Juin 2010
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste développeur

    Informations forums :
    Inscription : Juin 2010
    Messages : 317
    Par défaut
    Non non des deux cotés j'ai group0, group1 etc... pardon ^^.

    Ce test ? C'était pour tester si ils existent bien. Mais je pense qu'il est useless.

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 209
    Par défaut
    ...ça ne marche pas :
    ceci est trop vague.

    Suggestion quand même
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var k = 0;
    while (document.getElementById("group" + k)) {
        document.getElementById("group" + k).onclick = function() {
            alert(this.id);
            return false; // annule action par défaut
        }
        k++;
    }

  5. #5
    Membre éclairé
    Homme Profil pro
    Analyste développeur
    Inscrit en
    Juin 2010
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste développeur

    Informations forums :
    Inscription : Juin 2010
    Messages : 317
    Par défaut
    Quand je dis ça ne marche pas, ça veut dire que ça ne passe pas par l'évènement, j'ai aucun retour. De même avec le return false.

    J'ai même fais un test en dur et ça ne passe toujours pas par l'évènement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    document.getElementById("group0").onclick = function() {
    	alert(this.id);
    }

  6. #6
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 209
    Par défaut
    pourtant ceci fonctionne parfaitement
    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
    <!DOCTYPE HTML>
    <html lang="fr">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>[...]</title>
    </head>
    <body>
    <a id="lien0" href="page1.html">page1</a>
    <a id="lien1" href="page2.html">page2</a>
    <a id="lien2" href="page3.html">page3</a>
    <script type="text/javascript">
    var i = 0;
    while( document.getElementById( 'lien' +i)){
      document.getElementById( 'lien' +i).onclick = function(){
        alert( this.id);
        return false;
      }
      i++;
    }
    </script>
    </body>
    </html>
    l'erreur semble être ailleurs!

  7. #7
    Membre éclairé
    Homme Profil pro
    Analyste développeur
    Inscrit en
    Juin 2010
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste développeur

    Informations forums :
    Inscription : Juin 2010
    Messages : 317
    Par défaut
    Mes liens ne sont pas créés directement lorsque la page est chargée.

    Dans un premier temps j'ai un index alphabétique, lorsque je clique sur une lettre, c'est à ce moment là que mes liens sont créés.

    Peut être que le problème vient de là ?

  8. #8
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 209
    Par défaut
    c'est à ce moment là que mes liens sont créés.
    il est effectif que pour pouvoir affecter un événement à un élément il faut que l'élément existe.

    C'est au moment de leur création qu'il te faut affecter l'événement.

  9. #9
    Membre éclairé
    Homme Profil pro
    Analyste développeur
    Inscrit en
    Juin 2010
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste développeur

    Informations forums :
    Inscription : Juin 2010
    Messages : 317
    Par défaut
    Comment je peux affecter l'évènement lorsque je les créés ? C'est une page php qui gère ça (le serveur plus précisément), à ce moment là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while ( $k < $nb_resultats ) {
    	$nom = pg_result ( $requete, $k, "nom" );
    	echo "<a href='#' id='group$k'>" . ucwords ( $nom ) . "</a><br/>";
    	$k ++;
    }

  10. #10
    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
    Sinon, tu peux utiliser la délégation d'événements :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <div id="aContainer">
    <!-- C'est ici que tu insèreras tes liens -->
    </div>
    Puis ton JavaScript :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    document.getElementById('aContainer').onclick = function(event){
        var target = event.target ? event.target : event.srcElement;
        if(target && target.tagName.toLowerCase () == 'a'){
            alert(target.id);
        }
    }
    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

  11. #11
    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
    Et le script de Spaffy?

  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 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 659
    Billets dans le blog
    1
    Par défaut
    Et sinon regarder tout simplement le code html généré ?
    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
    Membre éclairé
    Homme Profil pro
    Analyste développeur
    Inscrit en
    Juin 2010
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste développeur

    Informations forums :
    Inscription : Juin 2010
    Messages : 317
    Par défaut
    Merci pour vos réponse.

    Dans l'après midi je testerais la réponse de Bovino.

    Sinon je trouve que le script est assez compliqué, je le regarderais plus attentivement si je n'y arrive toujours pas.

    SpaceFrog, j'ai déjà regardé, les id des liens sont bien incrémentés.

  14. #14
    Membre éclairé
    Homme Profil pro
    Analyste développeur
    Inscrit en
    Juin 2010
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste développeur

    Informations forums :
    Inscription : Juin 2010
    Messages : 317
    Par défaut
    Avec la réponse de Bovino ça marche, après vu que j'ai d'autres liens qui apparaisse dans la même div, lorsque j'utilise le moteur de recherche du site, donc ça passe aussi dans l'évènement. Mais bon je vais essayer d'arranger ça.

    Sinon, je pourrais avoir une explication sur les lignes suivantes ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var target = event.target ? event.target : event.srcElement;
        if(target && target.tagName.toLowerCase () == 'a'){
            alert(target.id);
    }

  15. #15
    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
    La délégation d'événements consiste à poser un écouteur sur un unique élément parent. L'avantage est d'une part d'éviter de multiplier les gestionnaires si plusieurs éléments doivent avoir le même comportement et d'autre part de permettre de prévoir une gestion d'événements avant que les éléments en rapport ne soient insérés dans le DOM.

    C'est cela que fait la portion de code que tu montres. On utilise l'objet event de l'événement pour récupérer l'élément qui a reçu l'événement (event.target) afin de déterminer s'il correspond au type d'élément souhaité (ici tagName == 'a', mais tu aurais pu tester un nom de classe par exemple : event.target.className), si c'est le cas, on lance le traitement souhaité.

    Attention, IE ne gère pas les événements comme les autres navigateurs, en particulier, le W3C préconise l'envoi de l'objet event en paramètre automatique de la fonction de rappel alors qu'IE, dans ses anciennes versions, attache l'objet event au contexte global window, pour pallier cela, j'utilise le nom event pour que le reste du code soit compatible.
    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

  16. #16
    Membre éclairé
    Homme Profil pro
    Analyste développeur
    Inscrit en
    Juin 2010
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste développeur

    Informations forums :
    Inscription : Juin 2010
    Messages : 317
    Par défaut
    Merci beaucoup pour ces précieuses réponses ^^. C'est très intéressant.

    A bientôt ^^.

  17. #17
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 209

  18. #18
    Membre éclairé
    Homme Profil pro
    Analyste développeur
    Inscrit en
    Juin 2010
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste développeur

    Informations forums :
    Inscription : Juin 2010
    Messages : 317
    Par défaut
    Au fait, que veut dire le point d’interrogation ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    event.target ? event.target : event.srcElement;

  19. #19
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 209
    Par défaut
    il s'agit d'un opérateur ternaire ou opérateur conditionnel
    condition ? valeur_VRAI : valeur_FAUX
    Opérateurs spéciaux

  20. #20
    Membre éclairé
    Homme Profil pro
    Analyste développeur
    Inscrit en
    Juin 2010
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste développeur

    Informations forums :
    Inscription : Juin 2010
    Messages : 317
    Par défaut
    Hum d'accord, donc dans ce cas, ça voudrait dire :

    si j'ai un event.target je retourne vrai sinon je retourne faux il n'y a pas d'event ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 4
    Dernier message: 20/01/2015, 17h13
  2. [Indy TCPClient] Recupérer le données reçues
    Par fandor7 dans le forum Web & réseau
    Réponses: 8
    Dernier message: 29/06/2003, 21h52
  3. [Winsock] Envoi et recupération d'une image
    Par arnolanf dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 29/11/2002, 08h49
  4. recupèrer file d'attente d'impression
    Par magic corp. dans le forum Langage
    Réponses: 2
    Dernier message: 25/09/2002, 14h12
  5. comment puis-je recupérer l'extesion du fichier?
    Par mirella dans le forum Langage
    Réponses: 7
    Dernier message: 14/08/2002, 15h56

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