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 :

Récupérer l'ID d'un message en cliquant sur un Input de type 'Image'


Sujet :

JavaScript

  1. #1
    Membre du Club Avatar de Lovegiver
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2015
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Août 2015
    Messages : 81
    Points : 57
    Points
    57
    Par défaut Récupérer l'ID d'un message en cliquant sur un Input de type 'Image'
    Bonjour,

    j'ai une webapp Java à laquelle je souhaite ajouter quelques mécanismes "Ajax" afin de limiter les chargements de pages.
    Je suis complètement débutant sur JS.

    J'ai trouvé pas mal de docs qui expliquent comment récupérer des valeurs depuis des "input" notamment avec des fonctions du type document.getElementById("xyz"), mais cela suppose que cet élément soit toujours présent et porte toujours le même nom.
    -> idéal dans un formulaire pour des champs tels que "nom" ou "prenom", etc.

    J'ai une page qui affiche des messages d'utilisateurs. Le nombre de messages à afficher est variable et chaque message possède un identifiant.
    Je souhaite ajouter à chaque message 2 images-boutons genre "like / dislike". En fonction de l'image cliquée, je déclencherai le mécanisme qui va modifier le compteur de mon objet et persister cette info en base avant de mettre à jour l'affichage sur la page et ce sans reload de celle-ci.

    Ma question est donc de savoir comment faire en sorte qu'un event onclick récupère l'id d'un message et dans quel attribut de l'image stocker cet id, sachant que ma fonction devra également récupérer l'id de l'utilisateur qui a cliqué.

    Actuellement, mon code Java transfère à ma JSP une Map sur laquelle je boucle pour afficher l'ensemble des messages.
    Pour chaque message, j'ajoute dynamiquement 2 images (like / dislike).
    Je ne peux pas stocker l'id du message dans les attributs "id" ou "name" de l'image, mais je ne vois pas trop où la stocker ailleurs.

    D'autre part, la fonction appelée par le "onclick=maFonction()" doit faire la différence entre un "like" et un "dislike". Ici non plus je ne comprends pas comment et où stocker cette info si le "document.getElementById()" se base sur un nom de contrôle invariable.

    Pour chaque post affiché, j'ajoute ces images :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <input type="image" src="img/heart-plus.png" onclick="alertForKeyValue();">
    <input type="image" src="img/heart-remove.png" onclick="alertForKeyValue();">
    Le code ci-dessus ne contient plus ni "id", ni "name", ni "value", j'ai tout supprimé au fur et à mesure d'essais infructueux... ceci dit je ne sais pas vraiment où stocker mes 2 infos importantes que sont :
    1) l'id du message : ${post.key.messageId}
    2) le choix "like" ou "dislike"

    L'id de l'utilisateur étant dans la Session, je n'aurais pas de pb pour le récupérer.

    Côté JS, je n'ai rien ou presque, je cherche pour l'instant à simplement afficher dans une boîte de dialogue du type "alert()" le choix effectué, mais celle-ci ne renvoie strictement rien jusqu'à présent.

    Qq1 pourrait-il m'indiquer le minimum vital pour démarrer svp ? Je tourne en rond depuis plus d'une journée sur cette broutille...

    Merci d'avance.

  2. #2
    Membre du Club Avatar de Lovegiver
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2015
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Août 2015
    Messages : 81
    Points : 57
    Points
    57
    Par défaut Comment stocker une valeur dynamique dans un INPUT type="IMAGE" ?
    Bonjour,

    j'ai l'impression que mon précédent post n'inspire personne, alors je vais tâcher d'être plus précis et factuel si tant est que le problème vienne de là ^^
    -> j'ai vraiment besoin d'aide, je suis à la rue en JS

    Contexte : J'ai une page Web d'un (futur) réseau social : il y a des utilisateurs, ils postent des messages, d'autres utilisateurs peuvent voter "like" ou "dislike". Ca vous rappelle quelque chose ?

    La webapp est codée en Java. On veut du AJAX pour éviter de reload la page à chaque click.


    Nom : devcom.jpg
Affichages : 450
Taille : 24,5 Ko

    Pour voter, il y a des petits coeurs.

    Pour prendre en compte un vote, on doit récupérer 3 éléments, dont un est déjà dans la session : l'ID de l'utilisateur.
    -> l'affichage dépend de l'utilisateur connecté : s'il a déjà voté, on ne lui présente plus le bouton déjà cliqué, seulement les autres au cas où il voudrait modifier son vote.

    Les 2 autres éléments sont :
    - l'ID du message concerné. Une page contient "n" messages, les images ne doivent donc faire référence qu'à un message donné.
    - la nature du vote : like ou dislike

    Voici le code de la JSP qui prend l'affichage en charge. Je boucle sur une Map qui contient un nombre variable de messages. Je teste à chaque fois si l'utilisateur connecté a déjà voté ou pas sur ce message.
    -> structure de la Map pour ceux qui connaissent Java : Map<Post,Integer> :
    • Post : la classe qui définit un message
    • Integer : une valeur 1, 0 ou -1 indiquant le vote de l'utilisateur connecté pour ce Post



    L'identifiant de chaque message est contenu dans : ${post.key.messageId}

    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
     
    <c:forEach var="post" items="${requestScope['postVotes']}">
     <div value="${post.key.messageId}">
     <ul>
     <c:if test="${post.key.responseLevelMessage == 0}">
       <hr>
       <li><font size="2"> Le ${post.key.messageDate} par 
       <a href="${pageContext.request.contextPath}/CentralStation?section=votePage&CurrentContext=${post.key.messageId}">${post.key.messageSender}</a>
       <br>
       <br> ${post.key.messageTitle}<br>
      ${post.key.messageContent}<br>
       </font>
     </c:if>
     <c:if test="${post.key.responseLevelMessage > 0}">
       <li><font size="1"> 
       <a href="${pageContext.request.contextPath}/CentralStation?section=votePage&CurrentContext=${post.key.messageId}">${post.key.messageSender}</a><br>
       <br> ${post.key.messageContent}<br>
       </font>
     </c:if>
     
     <c:choose>
       //1er cas : l'utilisateur a déjà voté "like"
      <c:when test="${post.value == 1}">
        <input type="hidden" id="postId" name="postId" value="${post.key.messageId}" />
        <input type="image" src="img/heart-clear.png" value="${post.key.messageId}" onclick="alertForKeyValue();">
        <input type="image" src="img/heart-dislike.png" value="${post.key.messageId}" onclick="alertForKeyValue();">
      </c:when>
       //2eme cas : l'utilisateur n'a pas voté
      <c:when test="${post.value == 0}">
        <input type="hidden" id="postId" name="postId" value="${post.key.messageId}" />
        <input type="image" src="img/heart-like.png" value="${post.key.messageId}" onclick="alertForKeyValue();">
        <input type="image" src="img/heart-dislike.png" value="${post.key.messageId}" onclick="alertForKeyValue();">
      </c:when>
       //3eme cas : l'utilisateur a déjà voté "dislike"
      <c:when test="${post.value == -1}">
        <input type="hidden" id="postId" name="postId" value="${post.key.messageId}" />
        <input type="image" src="img/heart-like.png" value="${post.key.messageId}" onclick="alertForKeyValue();">
        <input type="image" src="img/heart-clear.png" value="${post.key.messageId}" onclick="alertForKeyValue();">
      </c:when>
     </c:choose>
     </li>
     </ul>
     </div>
     </c:forEach>
    Avec JS, j'essaie pour l'instant d'afficher dans une alerte l'ID du message pour lequel un utilisateur clique, mais je n'obtiens toujours qu'un seul ID : celui du premier message affiché sur la page.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function alertForKeyValue(){
    	var postId = document.getElementById("postId")
    	alert(postId.value);
    }
    Voilà donc mon problème : je ne sais pas comment stocker pour chaque message sur la page l'ID propre à ce message. Ma fonction JS ne me renvoie que l'ID du premier message de la page.
    D'autre part, je ne vois pas comment récupérer l'info indiquant si l'utilisateur vote "like", "dislike" ou juste "clear" pour annuler son précédent vote.

    Mon expérience en JS n'a pas plus de 2 jours. Est-ce que qq1 parmi vous pourrait me dire comment réaliser ceci simplement ?


    Merci d'avance.

  3. #3
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    il ne s'agit pas d'un problème javascript mais HTML
    https://www.w3.org/TR/html401/struct...l.html#h-7.5.2

    id = name [CS]
    This attribute assigns a name to an element. This name must be unique in a document.

    A+JYT

  4. #4
    Membre du Club Avatar de Lovegiver
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2015
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Août 2015
    Messages : 81
    Points : 57
    Points
    57
    Par défaut
    Bonsoir @sekaijin

    merci pour ton début de réponse.

    Oui effectivement, le nom doit être unique, et c'est tout le fond de la question que je pose : comment, alors que les éléments sur ma page sont générés dynamiquement avec une boucle, faire en sorte que le click sur une image pointe uniquement vers un post spécifique ?

    J'ai justement bien conscience (cf. mon message n°1) que la récupération par JS de la donnée utile (l'id du message et le type d'action : like ou dislike) ne peut pas passer par un classique getElementByID qui impliquerait que l'ID soit UNIQUE.

    Du coup, que me reste-t-il comme solution ? Je ne connais pas grand chose à JS et tourne un peu en rond avec ce problème ?

    Merci.

  5. #5
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    s'il sont généré en java php asp rb etc...
    il suffit de mettre un compteur dans la boucle et de générer un id avec.
    A+JYT

  6. #6
    Membre du Club Avatar de Lovegiver
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2015
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Août 2015
    Messages : 81
    Points : 57
    Points
    57
    Par défaut
    Ajouter un compteur n'est pas un problème, mais comment la fonction JavaScript pourrait-elle connaître le nom résultant de l'ajout de cette valeur ?

    Si j'ai 4 messages sur ma page qui ont respectivement comme ID : 3, 18, 27 et 36, je pourrais tout aussi bien utiliser ces valeurs, mais comment la fonction JavaScript peut-elle savoir que mon clic sur l'image concerne le post avec l'ID 27 plutôt que le 36 alors qu'elle attend un ID ou un NAME précis ?

    C'est cet aspect là que je ne sais pas comment implémenter.

    Par exemple, si je fais :

    <input type="image" src="img/heart-plus.png" id="post-${post.key.messageId}" onclick="alertForKeyValue();">

    Ma fonction JS derrière doit pouvoir prendre comme argument : document.getElementById(post-UnIDspécifique)

    Comment faire ?

  7. #7
    Membre du Club Avatar de Lovegiver
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2015
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Août 2015
    Messages : 81
    Points : 57
    Points
    57
    Par défaut
    OK, solution trouvée avec un peu d'aide de ce côté-ci du web.

    Je fournis la réponse pour ceux que cela intéresserait plus que ma question () :

    Il suffisait de mettre "this.value" dans la fonction que j'appelais.

    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
     
    <c:choose>
    	<c:when test="${post.value == 1}">
    		<input type="image" src="img/heart-plus.png"
    			value="${post.key.messageId}"
    			onclick="like(this.value);">
    		<input type="image" src="img/heart-delete.png"
    			value="${post.key.messageId}" onclick="alertForKeyValue();">
    		<input type="image" src="img/heart-remove.png"
    			value="${post.key.messageId}"
    			onclick="dislike(this.value);">
    	</c:when>
    	<c:when test="${post.value == 0}">
    		<input type="image" src="img/heart-plus.png"
    			value="${post.key.messageId}"
    			onclick="like(this.value);">
    		<input type="image" src="img/heart-remove.png"
    			value="${post.key.messageId}"
    			onclick="dislike(this.value);">
    	</c:when>
    	<c:when test="${post.value == -1}">
    		<input type="image" src="img/heart-plus.png"
    			value="${post.key.messageId}"
    			onclick="like(this.value);">
    		<input type="image" src="img/heart-delete.png"
    			value="${post.key.messageId}" onclick="alertForKeyValue();">
    		<input type="image" src="img/heart-remove.png"
    			value="${post.key.messageId}"
    			onclick="dislike(this.value);">
    	</c:when>
    </c:choose>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function like(value){
    	alert("Like " + value);
    }
     
    function dislike(value){
    	alert("Dislike " + value);
    }

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

Discussions similaires

  1. Menu simple en vertical en cliquant sur un input-button
    Par mecmec dans le forum Mise en page CSS
    Réponses: 9
    Dernier message: 24/10/2013, 17h07
  2. [Débutant] Récupérer un message en cliquant sur un push button
    Par jeune informatique dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 07/06/2010, 08h26
  3. Envoyer automatiquement un message en cliquant sur un bouton
    Par fraginfo dans le forum Thunderbird
    Réponses: 0
    Dernier message: 11/01/2009, 12h19
  4. Réponses: 3
    Dernier message: 31/12/2008, 14h39
  5. [Javamail] récupérer QUE le corps du message
    Par nico_somb dans le forum API standards et tierces
    Réponses: 7
    Dernier message: 07/06/2006, 14h17

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