Récupérer un ID au clic

Fermé
Redox13 - Modifié le 2 avril 2021 à 21:19
 Redox13 - 6 avril 2021 à 13:30
Bonsoir à tous,
J'ai un formulaire pour changer en temps réel des images, où je peux choisir de modifier toutes les images ou une seule (qu'on devra cliquer).
Comment je peux avoir tout le temps la réponse de l'utilisateur (one ou all), et comment je peux savoir quelle image il a cliqué ?
Merci beaucoup de votre aide

   <li><!-- choix 1 image ou toutes les images  -->
    <fieldset>
    <legend>A qui appliquer le changement</legend> 
    <p><input type="radio" name="choix" id="changementId" value="one" checked> Image sélectionnée</p>
    <p><input type="radio" name="choix" value="all"> Toutes les images</p>
    </fieldset>
   </li>

  <figure id="fig0">
   <img class="image" id="img0" src="photos/imag0.jpg" alt="">
  </figure>
  <figure id="fig1">
   <img class="image" id="img1" src="photos/imag1.jpg" alt="">
  </figure>
  <figure id="fig2">
   <img class="image" id="img2" src="photos/imag2.jpg" alt="">
  </figure>
A voir également:

3 réponses

Bonjour,
il faut passer par la programmation événementielle:
L'événement c'est le clic et il récupère la valeur que l'on veut lui associer.
Ici c'est assez simple puisque l'événement étant un clic sur l'image on aura pas trop de difficultés à retrouver l'image en question en remontant à la source de l'événement(l'image' qui est clickée ou même rajouter un identifiant à l'image pour faciliter la tâche et ne pas avoir à utiliser l'adresse de l'image bien que celle ci soit tout à fait identifiant car pour chaque image correspond dans l'URL un fichier différent).

Mais plus que récupérer une valeur(qui peut être stockée sous forme de variable) il faut que vous poussiez le raisonnement plus loin:

Que doit il se passer une fois que la valeur est récupérée par le programme?
En effet ne faire que récupérer l'image sur laquelle on a clickée n'aboutit à rien(à part stocker une valeur dans un espace de mémoire).

Commencez déjà par le début:
quelques sont vos notions en programmation et plus généralement en JavaScript.
Il vous faut déjà apprendre les notions les plus simples avant d'arriver à quelque chose de plus aboutit.

Exemples avec démonstration pratique:
détection d'un clic souris avec JavaScript
https://www.w3schools.com/jsref/event_onclick.asp

détection d'un clic souris pour changer un paragraphe de texte
https://www.w3schools.com/jsref/prop_html_innerhtml.asp

et ici se qui se rapproche le plus du processus complet: récupération d'une valeur lors d'un événement(ici une touche du clavier) pour en faire quelque chose(afficher le caractère UNICODEcorrespondant dans la page)
https://www.w3schools.com/jsref/event_key_keycode.asp

Si la question est comment ça marche JavaScript la réponse ne peut être que: en apprenant à l'utiliser.

Bon apprentissage.

note: si votre besoin est de devoir traiter les données soit de façon sécurisée soit de les stocker de façon fiable JavaScript ne suffit pas il faudra utiliser des technologies serveurs(JavaScript fonctionnant sur l'ordinateur de l'utilisateur appelé client, les 2 entités clients/serveurs font une analogie assez simple à comprendre même si les bars sont fermés depuis un moment ).
0
Salut, merci de ta réponse très développée.
J'ai réussi à faire ceci (voir le code), et ça fonctionne.
Penses-tu que je peux faire plus simplement ?
Et j'aimerai aussi détecter quelle image a été cliqué, parmi les 25 que j'ai.

document.getElementById("images").addEventListener("change", function(){
  var choice = document.querySelectorAll("input");
  for (var i = 0; i < choice.length; i++) {
    if (choice[i].checked === true) break;
  }

  if (choice[i].value == "all") {
    var changement = /* toutes les images */
  } else {
    var changement =  /* détecter quelle image a été cliquée */
  }
})

			<li id="images"><!-- choix 1 image ou toutes les images  -->
				<fieldset>
				<legend>A qui appliquer le changement</legend> 
				<p><input type="radio" name="choix" id="changementId" value="one" checked> Image sélectionnée</p>
				<p><input type="radio" name="choix" value="all"> Toutes les images</p>
				</fieldset>
			</li>


Merci d'avance pour l'aide
0
Vous avez donc abandonné le clic pour une liste et un événement "change".

Celle ci est mal formée et ne sert à rien revoyez l'utilisation des listes en HTML.
Puisque que vous utilisez un élément de formulaire(qui doit donc être compris dans un formulaire) voir aussi comment s'utilisent les input (qui doivent être inscrits dans une balise form) vous pouvez simplement valider le formulaire pour obtenir sa valeur (en empêchant son envoi pour rester sur la même page).
Et forcément un JS inadapté à la page ou du HTML faux (là il y a les 2) ça risque pas de vous mener très loin.

Bref c'est tout à fait autre chose comme HTML donc ce qui s'appliquait pour un clic sur une image (hors formulaire et liste) ne s’applique plus sur une liste -mal formée et inutile car inexistante elle n'est pas déclarée en tant que liste : votre HTML est faux-.
Quant aux images il n'y en a pas mais des cases à cocher...

J’espère que vous avez réfléchit à quoi faire de la valeur (attribut value) que vous n'arrivez pas à trouver. En tout cas pas besoin de boucle si vous avez des éléments de formulaire(dans un formulaire) ces éléments sont spécifiques car ils peuvent renvoyer la valeur que l'on veut en passant par l'attribut d'objet .value(le "." ou notation pointée indique un élément d'objet comme dans "document." cela signifie que vous accédez à l’attribut d'objet (variable interne de l'objet) document qui est indiquée après le "." ou à une méthode de l'objet(fonction interne de l'objet). Un attribut d'objet peut être une valeur ou même un autre objet et &ainsi de suite; en arbre chacun des objets formant une branche qui se ramifie en plusieurs branches. C'est le modèle objet du document aussi appelé DOM en anglais Document Object Model). ).

Vous avez changez vos contenus donc il faut changer le raisonnement(une fois corrigé vos erreurs bien sûr, c'est à dire un code HTML correct).

Pour une réponse à votre question en gardant l'événement sur une image cliqué vous pouvez faire un truc du style:
https://www.w3schools.com/jsref/event_target.asp

Soit par exemple:

<!-- à remplacer par une image valide et avec la bonne adresse/URL (valeur de l'attribut src) sinon il n'y aura rien du tout sur lequel cliquer-->

<image id="imgclic" src="monImage.jpg" alt="image de test" name="bobleponge"/>




 /** le paramètre de la fonction "evt" correspond à l'événement en cours, evt est choisit arbitrairement, on peut l'appeler robert mais bon evt ça reste clair et rapide à écrire et comprendre. On retrouve souvent ce paramètre nommée "e" tout simplement aussi, première lettre du mot event. Ce n'es pas une convention ou un standard mais une facilité d'écriture.
*/


document.getElementById('imgclic').addEventListener('click', function(evt){
  console.log('l\'élément cliqué est un '+e.target);
  console.log('\til a pour ID '+e.target.id);
  console.log('\til a pour nom (attribut name)  '+e.target.getAttribute('name'));
  console.log('\til a pour source (attribut src)  '+e.target.getAttribute('src'));
}, false};


/** le paramètre de valeur false (dernier avant de refermer la parenthèse du addEventListener)que j'ai rajouté est facultatif(il vaut false si on l'omet). Il indique si l’événement doit s'arrêter ou se "propager" à son élément parent.

*/



Avec des formulaires c'est beaucoup plus simple(toute la partie contenu dans la fonction déclenchée par l'événement) et je vous laisse chercher des cours et exemples qui ne manquent pas sur la toile(à commencer par savoir écrire la partie HTML).

Bien sûr je n'ai donné que des pistes dans ma première réponse.
Ils sont incomplets (je n'ai pas vocation à remplacer un cours de JavaScript qui sera plus complet et mieux détaillé/expliqué et vous évitera de passer par des trucs foireux comme le contenu de la fonction de la boucle for à des attributions de variables incomplètes).
On peut aussi passer par une fonction classique que par une fonction anonyme qui est plus ou moins une facilité et utilisation avancée(en tout cas plus complexe et moins permissive) dans le cadre de la gestion d'un événement:


function faitQuelqueChose(e){
//... instructions

}

document.getElementById('idElement').addEventListener('click', faitQuelqueChose(evt) );

/** la fonction étant nommé cela permet de pouvoir la supprimer ou l'activer.
* bien sûr la fonction peut-être appelé dans un autre cadre, pour un autre élément, sur un  autre bouton, ou sans qu'il y ait dévénements ou de boutons qui rentre en jeu.
Cela permet une plus grande modularité du programme, d'utiliser des fonctions pour plusieurs pages, plusieurs sites voire différents cas d'utilisation donc ne pas perdre du temps à écrire plusieurs fois des choses similaires. Le principe premier d'une fonction.

*/




Pour vous orienter toutefois:

https://www.w3schools.com/tags/att_input_value.asp

Là c'est la référence du web mais pour apprendre il faudrait commencer par les bases avant de vous plonger dans le manuel technique.

https://www.google.com/search?q=traiter+les+formulaires+en+javascript

https://www.google.com/search?q=formulaire+HTML+obtenir+l%26%2339%3Battribut+value+d%26%2339%3Bun+input+checkbox+avec+JavaScript

Et avant tout:

https://www.google.com/search?q=INPUT+HTML+ccomment+%C3%A7a+marche

Voire :
https://www.commentcamarche.net/contents/493-formulaires-html-cours-et-exemples

A vous de voir. Plutôt que de mélanger des choses qui n'ont rien à voir(un clic sur une image et une case à cocher de formulaire - qui bien sûr peut correpsndre à une image) il faut faire un choix.
Les 2 propositions étant différentes elles auront une partie de leur développement différent.
0
En tout cas il faut avant tout définir votre besoin.
Si votre nécessité est d'avoir une information transmise sur une image lorsque l'on clique dessus(qui m'a fait vous fournir une réponse) alors il faut utiliser des images.

Si vous voulez des cases à cocher qui indique une information dans ce cas => formulaire.

La question essentielle auquel vous n'avez rien fournit reste toutefois que doit faire le programme une fois que vous aurez obtenu l'information lors d'un clic ou d'un changement d'état d'une case à cocher.
Il faudrait peut-être même commencer par cela.
Décomposer les étapes ça s'appelle un algorithme.
Si vous ne savez pas où vous allez ni d'où vous partez pas la peine de commencer à écrire des instructions.

Cordialement. Le cerveau reste l'outil essentiel dans le développement(une fois des notions de bases acquises). Commencer par penser en terme de logique humaine(par exemple avec les séquences qui sont à avoir d'un point A à un point B: "je clique sur le bidule ça fait ça." mais en juste un peu plus concret qu'ici) avant de vous attaquer à l'écriture d'un programme. Parce que sans plan/objectifs clairement définis vous vous perdez avant de commencer quoique ce soit.
0
Tes réponses sont très intéressantes, et j'ai pu en apprendre beaucoup (même si je savais déjà quelques petits trucs). J'ai réussi à faire ce que je voulais, du moins j'ai eu l'idée. Quand je cliques sur une image, je récupère son ID et je change son opacité. Seul problème, quand je clique sur une autre image, comment je peux faire pour que la précédente se remettent comme avant (en therme d'opacité).
Et après, pour le changement de tailles des images, je pensais faire un if, si l'utilisateur a cocher "image sélectionné", je récupère l'ID via le click. Mais si il a sélectionné "Toutes les images", j'itère sur toutes les images et je les modifie. Et je teste ça avec un if/else. Bonne idée ? Par contre, va falloir le faire 2 fois, une fois pour agrandir l'image/les images, et une autre fois pour diminuer la taille.
Merci à toi
0