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

jQuery Discussion :

Append avec Class et Id


Sujet :

jQuery

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Par défaut Append avec Class et Id
    Bonjour,

    Quelqu'un pourrait-il me dire comment faire pour que le deuxième click fonctionne?
    (Il faut d'abord cliquer sur le bouton puis sur le mot.)

    http://jsfiddle.net/FqffM/658/

    Merci d'avance.

  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 : 75
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Voir : Différences entre on() avec 1 ou 2 sélecteurs

    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
    55
    56
    <!DOCTYPE html>
    <html lang="fr" dir="ltr">
    <head>
      <meta http-equiv="cache-control" content="public, max-age=60">
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <meta name="author" content="Daniel Hagnoul">
      <title>Test</title>
      <link rel="stylesheet" href="http://code.jquery.com/ui/1.11.4/themes/le-frog/jquery-ui.min.css">
      <style>
        .clickable {
          margin-left: 1.2rem;
        }
      </style>
      <script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
      <script src="https://code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
    	<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.0/i18n/jquery-ui-i18n.min.js"></script>
      <script>
        'use strict';
     
        $( function(){
     
          let jObjListeMot = $( "#ListeMot" );
     
          $( "#Action" ).one( "click", function( ev ){
            jObjListeMot.append(
              '<span id = "MyWord1" class="clickable">Mot1 </span>',
              '<span id = "MyWord2" class="clickable">Mot2 </span>',
              '<span id = "MyWord3" class="clickable">Mot3 </span>',
              '<span id = "MyWord4" class="clickable">Mot4 </span>',
              '<span id = "MyWord5" class="clickable">Mot5 </span>',
              '<span id = "MyWord6" class="clickable">Mot6 </span>'
            );
     
            jObjListeMot.on( "click", ".clickable", function( ev ){ 
              console.log( this.id );
            });
          });
     
        });
     
        $( window ).on( "load", function( ev ){
     
        });
      </script>
    </head>
    <body>
      <main>
     
        <div id="ListeMot" >
          <button id="Action">Action</button>
        </div>
     
      </main>
    </body>
    </html>

    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
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Par défaut
    Merci beaucoup pour cette aide.
    Je voudrais cloner ma liste de mots et conserver la propriété du click sur la deuxième liste.

    http://jsfiddle.net/FqffM/660/

    Pourriez vous me dire s'il vous plait, comment je dois m'y prendre?
    Merci.

    Cordialement,

    Arsène

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Par défaut
    J'y suis presque. Y'a juste plus qu'à à utiliser For (i=1; i<Nbre+1;i++) ;

    http://jsfiddle.net/FqffM/661/

    ça marche pour 1 seul :

    http://jsfiddle.net/FqffM/664/

    mais pas pour plusieurs :

    http://jsfiddle.net/FqffM/665/

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    comme tu ne fournis pas de réelle explication,... ... voilà ce que j'ai cru comprendre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <input name="Action" id="Action" type="button" value="Action" /><br>
    <div id="ListeMot" ></div>
    <div id="ListeMot2" ></div>
    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
    $( "#Action" ).one( "click", function( ev ){
     
    	// 1/ on cre la liste de mot
    	 // chaque mot est 
    	$( "#ListeMot" ).append(
    	'<span data-id="1" class="clickable">Mot1 </span>',
    	'<span data-id="2" class="clickable">Mot2 </span>',
    	'<span data-id="3" class="clickable">Mot3 </span>',
    	'<span data-id="4" class="clickable">Mot4 </span>',
    	'<span data-id="5" class="clickable">Mot5 </span>',
    	'<span data-id="6" class="clickable">Mot6 </span>'
    	);
     
    	// on compte les data-id
    	var idMax = 0;
    	$( "#ListeMot .clickable" ).each(function(){
    		idMax = Math.max( idMax, $(this).attr('data-id') );
    	});
     
    	$( "#ListeMot, #ListeMot2" ).on( "click", ".clickable", function( ev ){
    		var id = $(this).attr('data-id');
    		idMax++; // on incrémente le data-id
    		$(this).attr('data-id',idMax); // on applique le data-id max (de l'élément en cours) avant clonage
    		$(this).clone().appendTo("#ListeMot2"); // on clone (avec le nouveau data-id max)
    		$(this).attr('data-id',id); // on rétablit le data-id de l'élément en cours à sa valeur initiale
    	});
     
    });

  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 : 75
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Citation Envoyé par Arsene12 Voir le message
    [...] Je voudrais cloner ma liste de mots et conserver la propriété du click sur la deuxième liste. [...]
    Presque bon !

    Comme vous insérez le clone après (insertAfter) jObjListeMot, il faut placer le gestionnaire d'événement sur l'élément supérieur dans le DOM, ce sera "body" :

    Code javascript : 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
    let jObjListeMot = $( "#ListeMot" );
     
    $( "#Action" ).one( "click", function( ev ){
    jObjListeMot.append(
      '<span class="clickable">Mot1 </span>',
      '<span class="clickable">Mot2 </span>',
      '<span class="clickable">Mot3 </span>',
      '<span class="clickable">Mot4 </span>',
      '<span class="clickable">Mot5 </span>',
      '<span class="clickable">Mot6 </span>'
    );
     
    $( "body" ).on( "click", ".clickable", function( ev ){ 
      console.log( ev.target );
    });
     
    $( ".clickable" )
      .clone( true, true )
      .insertAfter( jObjListeMot );
     
    });

    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.)

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Par défaut
    Merci pour le code mais c'est pas tout à fait ce que je voulais faire.

    Je voulais d'abord cloner tous les éléments de la Div1 dans la Div2.
    J'y étais arrivé :

    http://jsfiddle.net/FqffM/670/

    Mais ce que je voulais surtout c'était conserver les Id et les values.
    C'est pourquoi je voulais qu'en cliquant sur les clones une alert m'affiche leurs Id ou leurs values.

    Et j'ai trouvé la solution :

    http://jsfiddle.net/FqffM/671/

    Je me sers de la class pour cloner tous les éléments.

    Je clique de suite sur Résolu.

  8. #8
    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 : 75
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Non ! J'ai été trop vite !

    Un ID doit être unique dans la page web, impossible de cloner simplement des éléments avec ID.

    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.)

  9. #9
    Invité
    Invité(e)
    Par défaut
    Euhhh... personne n'a testé mon bout de code ?

    Citation Envoyé par Arsene12 Voir le message
    ...conserver les Id et les values...
    Non. Les id, ce n'est pas possible. Un id est UNIQUE.

    C'est pourquoi j'ai utiliser des data-id.

    N.B. On peut toujours utiliser un data-name (qui, lui, peut être le même pour le clone)

    Mais tu n'as toujours pas expliquer à QUOI ça devait servir...
    Ca aiderait à trouver une solution fonctionnelle et adaptée !

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Par défaut
    Bien sûr que j'ai testé :

    http://jsfiddle.net/FqffM/669/

    J'ai crée une application qui importe avec ajax des données dans une div.
    Ces données je cherche à les cloner dans une deuxième div.

    Le problème c'est que j'arrive pas à transposer ma solution Fiddle dans mon appli.

    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
     
     
    function maFonction(){
     
    	mondata = {Data1: arg1, Data2: arg2, Data3: arg3}, 
               $.ajax({
    	 url:'http://xxxxxx.php',
    	 type:'post',     
    	 data: mondata,     
    	 dataType:'json',
     
    	 success: function(data) {
             i=1
    	 if(data.success){
     
    	$.each(data, function(index,record){ 
     
            $('#Div1').append('<span id = "MyWord'+i+'" class="clickable"  >' +record.Numero + '</span>');
     
     
    	$("#MyWord"+i).clone().attr({id:$("#MyWord"+i).id,class:"clickable"}).appendTo("#Div2");
     
    ///////////////////////////////////////  La 1ère solution marche partiellement //////////////////////////
     
            //$("#MyWord"+i).on('click', function () {    // ça marche mais que pour la Div1
            //$( ".clickable" ).on( "click", function(){      // ça marche pas
    	$( ".clickable" ).on( "click", function( ev ){  // ça marche pas
     
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
     
    		alert("OK")
     
       		     });
     
    		});
    	    };
    	};
        });
    };
     
        $( window ).on( "load", function( ev ){
     
        });
    ;

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Par défaut
    Citation Envoyé par danielhagnoul Voir le message

    Un ID doit être unique dans la page web, impossible de cloner simplement des éléments avec ID.
    Je suis arrivé à conserver l'Id et ça marche :

    http://jsfiddle.net/FqffM/673/

    Je voudrai que si l'on clique sur un élément, son clone se colore aussi.

  12. #12
    Invité
    Invité(e)
    Par défaut
    "Conserver" les id n'est pas le problème.

    Comprends-tu : "Un id est et DOIT ETRE UNIQUE" ?

    Citation Envoyé par jreaux62 Voir le message
    C'est pourquoi j'ai utiliser des data-id

  13. #13
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Citation Envoyé par danielhagnoul Voir le message
    
    Comme vous insérez le clone après (insertAfter) jObjListeMot, il faut placer le gestionnaire d'événement sur l'élément supérieur dans le DOM, ce sera "body"
    http://jsfiddle.net/FqffM/676/

    j'ai testé le code, j'ai même remplacé insertAfter par appendTo, j'obtiens undefined quand je clique sur le mot pour avoir son identifiant :

  14. #14
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 520
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 520
    Par défaut
    1-normal que tu as "undefined" dans l'alerte par-ce-que tu n'as pas mis des ID pour tes éléments initiales class="cklickable".
    2- pour avoir un id d'un élément en jQuery, on fait $(element).attr("id") et non pas $(element).id.
    d'après ce que j'ai compris, c'est que tu veux attribuer des ID juste aux éléments clonés, et non pas aux éléments initiales, pour cela, tu peux attribuer un id unique pour chaque élément cloné dans un each.
    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
     
    let jObjListeMot = $( "#ListeMot" );
    let jObjListeMot2 = $( "#ListeMot2" );
     
    $( "#Action" ).one( "click", function( ev ){
    jObjListeMot.append(
      '<span class="clickable">Mot1 </span>',
      '<span class="clickable">Mot2 </span>',
      '<span class="clickable">Mot3 </span>',
      '<span class="clickable">Mot4 </span>',
      '<span class="clickable">Mot5 </span>',
      '<span class="clickable">Mot6 </span>'
    );
    $( "body" ).on( "click", ".clickable", function( ev ){ 
      console.log( ev.target );
    });
     
    $( ".clickable" )
    .each(function(i){
    	$(this)
    	.clone( true, true )
    	.attr("id","ID"+(i+1))
    	.appendTo( jObjListeMot2 );
    });
     
    $(".clickable").on( "click", function( ){
      alert($(this).attr("id"));
    });
     
     
    });

  15. #15
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Par défaut
    Je vous remercie pour cette solution. C'est exactement le code qu'il me fallait.

    http://jsfiddle.net/FqffM/682/

    Merci Beaucoup. :

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

Discussions similaires

  1. operator>> avec class
    Par maminova77 dans le forum C++
    Réponses: 4
    Dernier message: 25/04/2006, 18h47
  2. Boucle sur chaque div avec class= ....
    Par zevince dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/04/2006, 12h12
  3. [Upload] Problème pour gestion d'erreur avec class
    Par allserv dans le forum Langage
    Réponses: 2
    Dernier message: 27/12/2005, 13h00
  4. [debutant] affichage ds un JtextArea avec classes independan
    Par tony_big_guy dans le forum Composants
    Réponses: 3
    Dernier message: 27/11/2005, 23h04
  5. Heritage de classe avec classes internes
    Par Regis.C dans le forum Langage
    Réponses: 11
    Dernier message: 27/04/2005, 12h19

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