Input range

Résolu/Fermé
Bruno - 22 oct. 2021 à 17:28
 Bruno - 22 oct. 2021 à 19:48
Bonjour à tous,

J'ai une question à vous poser:

Je suis en train de créer un petit formulaire où j'utilise notamment un input range comme ceci:



echo '<input type="range" id="DSchoix2" name="DSchoix2"
min="0" max="100" step="1">
<label for="volume">Volume</label>'



Tout marche bien, je récupère ma valeur sur une autre page, etc.. tout cela fonctionne bien.

Par contre, j'aurai voulu afficher une valeur quand l'utilisateur bouge le curseur du range. Par exemple, mon range est sur une plage de valeurs comprises entre 0 et 100 et je souhaiterai que cela affiche par exemple 63 (supposons que c'est la position qu'aura choisi l'utilisateur) à côté de la "barre range". Je ne sais pas si cela est possible.

J'ai regardé quelques forums, je crois que c'est possible avec output ou css mais je ne sais pas l'insérer dans mon code echo ci-dessus.

Auriez vous peut être une idée, un conseil ?

Je suis preneur aussi d'autres solutions

Merci à tous et à bientôt

Bruno


Configuration: Windows / Firefox 93.0

2 réponses

Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
Modifié le 22 oct. 2021 à 18:17
Bonjour,

Une solution possible est d'ajouter un écouteur sur l’événement "oninput" de ton input type range afin de récupérer sa valeur lorsqu'on le change et de l'afficher dans un élément html.

Par exemple, je propose d'afficher la valeur de l'input dans un span auquel j'applique une classe css pour le manipuler plus facilement en js (j'ai choisi le nom "range-result" pour la classe css).
Dans le cas où on aurais besoin d'afficher plusieurs input type range, il faut indiquer pour chacun quel sera le span où afficher le résultat. Pour cela j'utilise un attribut personnalisé data-range sur la balise span.range-result qui contiendra l'identifiant de l'input type range lié à ce span.range-result.

Au passage, comme pour l'attribut personnalisé data-range, l'attribut for de la balise label devrait également correspondre à l'identifiant de l'input lié au label.

<!-- HTML -->
<input type="range" id="DSchoix2" name="DSchoix2" min="0" max="100" step="1">
<label for="DSchoix2">Volume <span class="range-result" data-input="DSchoix2"></span></label>

<br>

<input type="range" id="DSchoix3" name="DSchoix3" min="0" max="100" step="1">
<label for="DSchoix3">Label <span class="range-result" data-input="DSchoix3"></span></label>

-> Ici je place la balise span.range-result directement dans le label mais on peut le déplacer n'importe où dans le document

Enfin en js, on récupère tous les éléments span.range-result puis pour chacun d'eux, on récupère l'input type range associé. On affiche alors la valeur de l'input dans le span (pour afficher la valeur dès le chargement de la page) et on applique un écouteur sur l'événement js "oninput" de l'input dans lequel on met à jour l'affichage (pour modifier la valeur lorsqu'on change l'input).

const rangeResults = document.querySelectorAll('.range-result');

rangeResults.forEach(function(rangeResult) {
  const rangeInput = document.querySelector('#' + rangeResult.dataset.input);
  
  if (rangeInput) {
    rangeResult.innerHTML = rangeInput.value;
    
   rangeInput.addEventListener('input', function(){
      rangeResult.innerHTML = rangeInput.value;
    });
  }
});


Mon test en ligne : https://jsfiddle.net/30p25yh8/

Bonne journée,
0
Bonjour Pitet,

Merci beaucoup, ça marche du tonnerre :)

C'est génial

J'ai appris une chose de plus aujourd'hui, encore merci

Bonne soirée

David
0