web-dev-qa-db-fra.com

Comment obtenir l'ancien Value avec l'événement onchange () dans la zone de texte

J'ai une zone de texte et une valeur poplulated dedans quand la page se charge. Maintenant, si l'utilisateur évite quelque chose dans la zone de texte, je souhaite obtenir la valeur modifiée (nouvelle valeur) et l'ancienne valeur, mais lorsque je fais ELEMENT.value, il ne donne que la valeur modifiée.

des suggestions pour obtenir une valeur ancienne?

ci-dessous est mon code

<head>
    <script type="text/javascript">
      function onChangeTest(changeVal) {
        alert("Value is " + changeVal.value);
      }
    </script>
  </head>
  <body>
    <form>
      <div>
          <input type="text" id="test" value ="ABS" onchange="onChangeTest(this)">  
      </div>
    </form>
  </body>
</html>

Merci d'avance

76
CFUser

element.defaultValue vous donnera la valeur initiale.

Veuillez noter que cela ne fonctionne que sur la valeur initiale.

Si vous en avez besoin pour conserver l'ancienne valeur à chaque modification, une propriété expando ou une méthode similaire répondra à vos besoins

67
George

Vous devrez stocker l'ancienne valeur manuellement. Vous pouvez le stocker de nombreuses façons différentes. Vous pouvez utiliser un objet javascript pour stocker des valeurs pour chaque zone de texte, ou un champ caché (je ne le recommanderais pas - trop html), ou une propriété expando dans la zone de texte, comme ceci:

<input type="text" onfocus="this.oldvalue = this.value;" onchange="onChangeTest(this);this.oldvalue = this.value;" />

Ensuite, votre fonction javascript pour gérer le changement ressemble à ceci:

    <script type="text/javascript">
    function onChangeTest(textbox) {
        alert("Value is " + textbox.value + "\n" + "Old Value is " + textbox.oldvalue);
    }
    </script>
158
Gabriel McAdams

Vous devez utiliser les attributs de données HTML5. Vous pouvez créer vos propres attributs et y sauvegarder différentes valeurs.

5
tiwari.vikash

Je voudrais suggerer:

function onChange(field){
  field.old=field.recent;
  field.recent=field.value;

  //we have available old value here;
}
4
krsnik

Je ne suis pas sûr, mais peut-être que cette logique fonctionnerait.

var d = 10;
var prevDate = "";
var x = 0;
var oldVal = "";
var func = function (d) {
    if (x == 0 && d != prevDate && prevDate == "") {
        oldVal = d;
        prevDate = d;
    }
    else if (x == 1 && prevDate != d) {
        oldVal = prevDate;
        prevDate = d;
    }
    console.log(oldVal);
    x = 1;
};
/*
         ============================================
         Try:
         func(2);
         func(3);
         func(4);
*/
2
Alex

Un truc sale que j'utilise parfois, cache des variables dans l'attribut 'name' (que je n'utilise normalement pas à d'autres fins):

select onFocus=(this.name=this.value) onChange=someFunction(this.name,this.value)><option...

De manière quelque peu inattendue, l’ancienne et la nouvelle valeur sont ensuite soumises à someFunction(oldValue,newValue)

2
Jon

Vous pouvez faire ceci: ajouter un attribut oldvalue à un élément html, ajouter set oldvalue lorsque l’utilisateur clique dessus. Ensuite, l'événement onchange utilise oldvalue.

<input type="text" id="test" value ="ABS" onchange="onChangeTest(this)" onclick="setoldvalue(this)" oldvalue="">

<script>
function setoldvalue(element){
   element.setAttribute("oldvalue",this.value);
}

function onChangeTest(element){
   element.setAttribute("value",this.getAttribute("oldvalue"));
}
</script>
1
Pham Thai Son

Peut-être pourriez-vous essayer de sauvegarder l'ancienne valeur avec l'événement "onfocus" pour ensuite la comparer à la nouvelle valeur avec l'événement "onchange".

0
ownking

Peut-être que vous pouvez stocker la valeur précédente de la zone de texte dans une zone de texte masquée. Ensuite, vous pouvez obtenir la première valeur de hidden et la dernière valeur de textbox elle-même. Une alternative liée à cela, lors de l'événement onfocus de votre zone de texte, définissez la valeur de votre zone de texte sur un champ masqué et lors de l'événement onchange, lisez la valeur précédente.

0
Canavar