Détecter un changement de valeur dans un input

Détecter un changement de valeur dans un input - Javascript/Node.js - Programmation

Marsh Posté le 21-12-2018 à 11:32:46    

Bonjour,  
Dans un formulaire, j'ai un input type text en read-only qui prend sa valeur via un clic sur un autre élément (un tableau qui contient des valeurs, la valeur cliquée étant reportée dans le input). J'ai besoin de détecter quand la valeur a changé dans ce input. onchange et oninput ne réagissent pas car le composant n'a pas le focus :(
Pour info, j'ai pas la possibilité de modifier le script qui reporte la valeur du tableau dans le input.
Merci par avance :jap:


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 21-12-2018 à 11:32:46   

Reply

Marsh Posté le 21-12-2018 à 11:50:47    

Pourquoi ne pas propager l'évènement à partir du clic et vérifier si la nouvelle valeur est différente de l'ancienne ?

 

EDIT : mal lu, j'ai lu le contraire, comme quoi tu pouvais modifier cette partie du script...


Message édité par MaybeEijOrNot le 21-12-2018 à 11:51:38

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 21-12-2018 à 12:06:19    

Et tu ne peux même pas retirer l'évènement attaché à l'élément cliqué pour en ajouter un nouveau qui ferait ce que je te propose + ce que faisais le script ?


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 21-12-2018 à 16:10:43    

Bon j'ai trouvé une solution qui doit être possible, en modifiant le setter de la propriété "value" de ton textarea : https://codepen.io/anon/pen/yGMPLq
Tu as juste à changer le contenu du if en fonction de ce que tu veux faire quand la valeur change.


Message édité par MaybeEijOrNot le 21-12-2018 à 16:15:32

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 21-12-2018 à 16:20:11    

Effectivement, je pense que ça va le faire. C'était un input et non un textarea, mais peu importe, le système devrait fonctionner. Quelque part, ça rejoint ce que je pensais : devoir faire une sorte de monitoring de la valeur courante de mon input.
 
Merci :jap:


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 21-12-2018 à 16:26:45    

Hum ça change un peu, je t'ai mis à jour le codepen, fallait remplacer le this.innerHTML par un setAttribute.

 

EDIT : et à voir comment il modifie la valeur justement, est-ce qu'il passe par la proriété value ou autrement ?


Message édité par MaybeEijOrNot le 21-12-2018 à 16:28:16

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 21-12-2018 à 17:02:17    

En fait c'est vraiment important de savoir comment est modifiée la propriété. Si c'est avec "setAttribute('value', newvalue);" ou "obj.value = newvalue;" ce n'est pas absolument pas la même chose.
La bonne façon de procéder est la première (setAttribute) mais d'expérience peu de gens le font.
 
Ma solution fonctionne pour "obj.value = newvalue;" en utilisant un bug de définition des clés des propriétés. Mais du coup si une modification de obj.value est effectuée avant la modification du setter ça be fonctionne plus.
 
Une solution propre doit pouvoir exister avec l'utilisation de "setAttribute".


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 21-12-2018 à 17:07:04    

Effectivement, quand on remplace textarea par un input avec un attribut value, le code marche pas :(
Et oui, la MAJ de la valeur du input se fait via "obj.value = newvalue;"
C'est quand même une méthode en vigueur depuis la fin des années 90 bien avant que setAttribute existe je pense.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 21-12-2018 à 18:29:22    

C'est bien ça le problème, il ne modifie qu'une propriété de l'objet en question alors qu'avec setAttribute tu modifies toutes ls propriétés associées.

 

Je te laisse avec ce dernier codepen : https://codepen.io/anon/pen/JwWpZx
Tout fonctionne sauf l'affichage de la bonne valeur dans l'input, je ne comprends pas pourquoi.

 

EDIT : sinon ce codepen https://codepen.io/anon/pen/yGMPLq fonctionne bien, faut juste pas faire d'appel sur myObj.value avant l'évènement.


Message édité par MaybeEijOrNot le 21-12-2018 à 18:58:26

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 21-12-2018 à 23:09:32    

Je te remercie. Je testerai le code n°2 à mon retour de congés et te tiendrai au courant. ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 21-12-2018 à 23:09:32   

Reply

Marsh Posté le 22-12-2018 à 10:58:46    

Par contre, la meilleure solution reste évidemment :

MaybeEijOrNot a écrit :

Et tu ne peux même pas retirer l'évènement attaché à l'élément cliqué pour en ajouter un nouveau qui ferait ce que je te propose + ce que faisais le script ?


 
 
Après, en fonction de comment a été créé l'évènement, ce n'est pas forcément évident de pouvoir le retirer.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed