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 :

Seul le premier ID est pris en compte


Sujet :

jQuery

  1. #1
    Membre confirmé
    Inscrit en
    Août 2010
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 156
    Par défaut Seul le premier ID est pris en compte
    Bonjour,

    Pouvez vous m'aidé SVP:
    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
    <script type="text/javascript">
     
        $('#album_save').live("click",function() {	
     
    	var alb = $("ul.son_ul li").attr('id');
     
        alert(alb);
     
    		$.ajax({ 
    		   type: "POST", 
    		   url: base_path+"/saved.php", 
    		   data: "album="+$("#new_album").val(), 
    		   success: function(msg){ 
    				if(msg==1) 
    				{
    					$("span#erreur").html("<span id=\"confirmMsg\">Enregistrement avec success.</span>");
     
    				}
    				else 
    				{
    					$("span#erreur").html("<img src=\"bomb.png\" style=\"float:left;\" />Veuillez selectionner un album ou créer un nouveau !");
     
    				}
    		   }
    		});
    		return false; 
    	});
     
    	</script>
    Code HTML:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <ul id="main_box">
      <li class="select_box">
        <span>Selection Album</span>
        <ul class="son_ul">
          <li id='new'>Nouveau Album</li>
          <li id="1">Album2</li>
          <li id="2">Album3</li>
          <li id="3">Album4</li>
          <li id="4">Album5</li>
        </ul>
      </li>
    </ul>
    Quand je sélectionne un LI ça me retourne toujours le premier des ID qui est (NEW)

    Vous avez une explication s'il vous plait ?

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur Hospitalier
    Inscrit en
    Juillet 2004
    Messages
    993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Hospitalier
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 993
    Billets dans le blog
    1
    Par défaut
    Question, ou est #album_save ?
    Car dans ton code, on devine que lorsqu'on click sur l'element html dont l'id est album_save tu faire une requête ajax que te retourne ton PHP au retour on sait toujours pas??

  3. #3
    Membre confirmé
    Inscrit en
    Août 2010
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 156
    Par défaut
    Ah oui j'ai oublié:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <p style="text-align:center"><a href="" class="button04" name="g" value="1" id="album_save" >Enregistrer les modifications</a></p> 
    	<span id="erreur"></span>

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur Hospitalier
    Inscrit en
    Juillet 2004
    Messages
    993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Hospitalier
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 993
    Billets dans le blog
    1
    Par défaut
    Explique moi vite fait l’interactivité cliente.
    Et ce que tu souhaite faire côté js (jquery) et PHP ce qu'il te retourne.
    Sa m'aiderais pour mieux ciblé ton problème.

  5. #5
    Membre confirmé
    Inscrit en
    Août 2010
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 156
    Par défaut
    tout d'abord merci,

    Voila, par exemple je click sur "nouveau album" (<li>) en premier, j'aurai comme ALERT (NEW), et après quand je change et click sur "album1", j'ai le même message (NEW) et moi je veut qu'il soit "1" celui que j'ai met dans son ID !

    Voila, j'espère que j'ai étais clair

  6. #6
    Membre Expert

    Homme Profil pro
    Ingénieur Hospitalier
    Inscrit en
    Juillet 2004
    Messages
    993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Hospitalier
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 993
    Billets dans le blog
    1
    Par défaut
    ok merci pour le plus de précision, s'est plus facile à comprendre .
    Tout d'abord tu n'a pas d'événement click sur ton li d'après ton code.

    Pour affiché l'id de ton li il faut que tu fasse comme tu a fait pour ton enregistrement mais sur le ul li.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $('ul.son_ul li').live("click",function() {	
       alert($(this).attr("id"));
    });
    J'ai pas testé.

  7. #7
    Membre confirmé
    Inscrit en
    Août 2010
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 156
    Par défaut
    Merci pour la réponse, je teste et je reviens donné le résultat

  8. #8
    Membre Expert

    Homme Profil pro
    Ingénieur Hospitalier
    Inscrit en
    Juillet 2004
    Messages
    993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Hospitalier
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 993
    Billets dans le blog
    1
    Par défaut
    k pas de soucis, .

  9. #9
    Membre confirmé
    Inscrit en
    Août 2010
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 156
    Par défaut
    Non ça marche pas, en plus pas besoin d'un événement click et ce qui est mon BUT vue que l'id est sélectionné dans le code quand on click sur les <LI id="X">xxx</LI>

    Le problème c'est comme si que le code garde en mémoire le premier click !!!

  10. #10
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 104
    Par défaut
    Petite précision sur la méthode attr de jQuery : cette méthode ne récupère que l'attribut du premier élément du groupe. C'est clairement indiqué dans la doc.

    Donc, le comportement de ce script était tout à fait normal
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  11. #11
    Membre confirmé
    Inscrit en
    Août 2010
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 156
    Par défaut
    Et donc c'est quoi la solution ??

  12. #12
    Membre Expert

    Homme Profil pro
    Ingénieur Hospitalier
    Inscrit en
    Juillet 2004
    Messages
    993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Hospitalier
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 993
    Billets dans le blog
    1
    Par défaut
    K laisse moi 10 min et je t'explique un pour mieux.

  13. #13
    Membre confirmé
    Inscrit en
    Août 2010
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 156
    Par défaut
    D'accord merci beaucoup

  14. #14
    Membre Expert

    Homme Profil pro
    Ingénieur Hospitalier
    Inscrit en
    Juillet 2004
    Messages
    993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Hospitalier
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 993
    Billets dans le blog
    1
    Par défaut
    Désolé pour le temps .
    Ton problème vient du fait que tu utilise un ul li sans comportement d'état selected comme pour un select donc faut le créer, et après vérifié son état c tout .
    Ton html il faut rajouté un état dans class du li, c'est une classe css fictive que j'ai appelé SELECT mais si tu utilise déjà ce nom dans ton fichier css ou ne balise style change le, il te servira de témoin d'état de selection ou pas de ton li.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <ul id="main_box">
      <li class="select_box">
        <span>Selection Album</span>
        <ul class="son_ul">
          <li class="select" id='new'>Nouveau Album</li>
          <li class="select" id="1">Album2</li>
          <li class="select" id="2">Album3</li>
          <li class="select" id="3">Album4</li>
          <li class="select" id="4">Album5</li>
        </ul>
      </li>
    </ul>
    Et donc pour la suite de ton enregistrement tu fait simplement :

    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
     
    <script type="text/javascript">
    /*function qui permettra de mettre un Etat mémorisé le dernier click sur ton ul li*/
     
    $('.select').live('click', function(event) {  
       var curId = this.id; /* id du click sur le li */
       alert(curId);
       $('.select').each(function(){
           if(curId == this.id){
               $(this).attr("class","select selected");
           }else{
                $(this).attr("class","select");
            }
       });
    });
     
     
        $('#album_save').live("click",function() {	
     
    	var alb = $("ul.son_ul li[class=select selected]").attr('id');
     
        alert("test id via ajax = "+alb);
     
    		$.ajax({ 
    		   type: "POST", 
    		   url: base_path+"/saved.php", 
    		   data: "album="+$("#new_album").val(), 
    		   success: function(msg){ 
    				if(msg==1) 
    				{
    					$("span#erreur").html("<span id=\"confirmMsg\">Enregistrement avec success.</span>");
     
    				}
    				else 
    				{
    					$("span#erreur").html("<img src=\"bomb.png\" style=\"float:left;\" />Veuillez selectionner un album ou créer un nouveau !");
     
    				}
    		   }
    		});
     
    		return false; 
    	});
     
    	</script>
    Et si tu pouvait mettre à résolu ça serait sympa .

  15. #15
    Membre Expert

    Homme Profil pro
    Ingénieur Hospitalier
    Inscrit en
    Juillet 2004
    Messages
    993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Hospitalier
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 993
    Billets dans le blog
    1
    Par défaut
    Petite précision sur la méthode attr de jQuery : cette méthode ne récupère que l'attribut du premier élément du groupe. C'est clairement indiqué dans la doc.

    Donc, le comportement de ce script était tout à fait normal
    Pour répondre à ton commentaire Watilin oui que si il n'est pas dans une boucle des éléments, il s'agit que d'un simple attribut id ni plus ni moins comme $('ul.son_ul li').attr("id") retournerons la permière valeur du groupe.
    Mais dans une boucle d'élément c'est tout autre chose $(this).attr("id") ou this.id nous permettra d'avoir bien l'élément id cliquer catcher par son événement click et c'est aussi dans la doc.

  16. #16
    Membre confirmé
    Inscrit en
    Août 2010
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 156
    Par défaut
    Wow !!!! Merciiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii beaucouuuuppppppppp !!!!!!!!!!!!!

    T'es vraiment un génie toi, merci, si je pouvé faire plus que résolu ça sera fait !!! merci et bonne continuation

  17. #17
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 646
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 646
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $('.select').each(function(){
           if(curId == this.id){
               $(this).attr("class","select selected");
           }else{
                $(this).attr("class","select");
            }
       });
    peut s'écrire plus simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $('.select').each(function(){
        $(this).toggleClass("selected", curId == this.id);
    });


    Sinon
    oui que si il n'est pas dans une boucle des éléments
    Que ce soit dans une boucle ou pas, les méthodes telles que .attr() renvoient toujours la valeur du premier élément, mais comme dans une boucle .each(), un seul élément est traité à la fois, c'est bien sa valeur qui est utilisée.
    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

  18. #18
    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 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    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 661
    Billets dans le blog
    1
    Par défaut
    Juste une précision...
    un id ne doit pas être uniquement numérique, ni commencer par du numérique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <li class="select" id="1">Album2</li>

    rajoute un non numérique devant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <li class="select" id="_1">Album2</li>
    Sinon en passant par les data
    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
    <script type='text/javascript'>
    $(function(){
    sel=new Array()
    $('#main_box .son_ul .select').data('selected',false).click(function(){
    sel=[]
    $(this).data('selected',($(this).data('selected')!==true)?true:false)
    .css('background-color',$(this).data('selected')?'silver':'white')
    .parent('.son_ul').find('li').filter(function(){return $(this).data('selected')=== true; }).each( function(){  sel.push($(this).attr('id')) } )
    })
     
    $('#album_save').click(function(e){
    e.preventDefault();
    alert( sel )
    })
     
    })
    </script>
    </head>
    <body>
    <ul id="main_box">
      <li class="select_box">
        <span>Selection Album</span>
        <ul class="son_ul">
          <li class="select" id='new'>Nouvel Album</li>
          <li class="select" id="_1">Album1</li>
          <li class="select" id="_2">Album2</li>
          <li class="select" id="_3">Album3</li>
          <li class="select" id="_4">Album4</li>
        </ul>
      </li>
    </ul>
    <p style="text-align:center"><a href="" class="button04" name="g" value="1" id="album_save" >Enregistrer les modifications</a></p> 
    	<span id="erreur"></span>
    	</body>
    </html>
    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 !

  19. #19
    Membre Expert

    Homme Profil pro
    Ingénieur Hospitalier
    Inscrit en
    Juillet 2004
    Messages
    993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Hospitalier
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 993
    Billets dans le blog
    1
    Par défaut
    Merci pour ses précisions Bovino, SpaceFrog , elles sont intégrées dorénavant.

  20. #20
    Rédacteur
    Avatar de Macmillenium
    Homme Profil pro
    Développeur front-end
    Inscrit en
    Mars 2008
    Messages
    2 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur front-end
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2008
    Messages : 2 333
    Par défaut
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $(this).data('selected',($(this).data('selected')!==true)?true:false)
    Pourquoi une condition ternaire? Le résultat est un booléen, donc
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    $(this).data('selected',!($(this).data('selected')))
    suffit, non?

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/08/2010, 14h15
  2. Réponses: 1
    Dernier message: 22/02/2010, 11h58
  3. Réponses: 7
    Dernier message: 24/07/2009, 16h49
  4. Seul le premier chiffre est enregistré à l'insertion
    Par franquis dans le forum Langage
    Réponses: 6
    Dernier message: 11/07/2009, 18h08
  5. input est pris en compte, input:focus non
    Par baggie dans le forum Mise en page CSS
    Réponses: 8
    Dernier message: 21/04/2009, 16h31

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