4 votes

Empêcher les événements onchange d'entrer dans une boucle infinie

J'ai deux champs de texte, l'un représente un pourcentage et le second un montant correspondant. Ce que je veux, c'est que lorsque le pourcentage change, le montant change et lorsque le montant change, le pourcentage change en conséquence. J'utilise le javascript.

Dans ce cas, si l'un d'entre eux change, une boucle infinie s'enclenche.

Ce que je voudrais, c'est que lorsque le montant change, le pourcentage soit modifié en conséquence et que la boucle s'arrête. Et lorsque le pourcentage change, le montant doit être modifié en conséquence et la boucle doit s'arrêter. Existe-t-il un moyen pour cela ? Peut-être quelque chose comme stopPropagation ?

Code JS factice :

Ici value est une zone de texte et percentage est une autre zone de texte

function valueChng(){
    percentage.value = "" + someInteger;
}
function percentageChng(){
    value.value = "" + someInteger;
}

Merci !

8voto

Simon Points 2274

Je ne vois toujours pas de problème, car un gestionnaire de changement n'est pas exécuté lorsque le contenu est modifié par programme. Je viens d'implémenter un simple fiddle pour montrer comment cela fonctionne sans tomber dans une boucle infinie (en utilisant jquery pour plus de simplicité) : http://jsfiddle.net/aWuks/

0voto

Konrad Dzwinel Points 10160

De tête :

var changedFlag = false;

function valueChng(){
    if(changedFlag == true) {
      changedFlag = false;
      return;
    }

    percentage.value = "" + someInteger;
    changedFlag = true;
}
function percentageChng(){
    if(changedFlag == true) {
      changedFlag = false;
      return;
    }

    value.value = "" + someInteger;
    changedFlag = true;
}

Ainsi, le deuxième des deux événements "onchange" sera toujours ignoré.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X