Как получить старое значение с помощью события onchange () в текстовом поле - PullRequest
76 голосов
/ 15 декабря 2009

У меня есть текстовое поле и значение, заполненное в нем при загрузке страницы. Теперь, если пользователь изменяет что-либо в текстовом поле, я хочу получить измененное значение (новое значение) и старое значение но когда я делаю ELEMENT.value, то его выдача только изменила значение

какие-либо предложения, чтобы получить старое значение?

ниже мой код

<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>

Заранее спасибо

Ответы [ 9 ]

156 голосов
/ 15 декабря 2009

Вам нужно будет сохранить старое значение вручную. Вы можете хранить это разными способами. Вы можете использовать объект javascript для хранения значений для каждого текстового поля, или вы можете использовать скрытое поле (я бы не рекомендовал его - слишком тяжелый html), или вы можете использовать свойство expando для самого текстового поля, например так:

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

Тогда ваша функция JavaScript для обработки изменений выглядит следующим образом:

    <script type="text/javascript">
    function onChangeTest(textbox) {
        alert("Value is " + textbox.value + "\n" + "Old Value is " + textbox.oldvalue);
    }
    </script>
67 голосов
/ 15 декабря 2009

element.defaultValue даст вам исходное значение.

Обратите внимание, что это работает только с начальным значением.

Если вам нужно сохранить это «старое» значение каждый раз, когда оно меняется, то вам будет соответствовать свойство expando или аналогичный метод

5 голосов
/ 19 августа 2014

Вы должны использовать атрибуты данных HTML5. Вы можете создавать свои собственные атрибуты и сохранять в них различные значения.

3 голосов
/ 30 мая 2011

Я бы предложил:

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

  //we have available old value here;
}
2 голосов
/ 10 сентября 2014

Я не уверен, но, возможно, эта логика сработает.

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 голосов
/ 07 декабря 2011

Грязная уловка, которую я иногда использую, это скрытие переменных в атрибуте 'name' (которые я обычно не использую для других целей):

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

Несколько неожиданно и старое, и новое значение затем передаются в someFunction(oldValue,newValue)

0 голосов
/ 22 июля 2015

Вы можете сделать это: добавить атрибут oldvalue в html-элемент, добавить set oldvalue при нажатии пользователем. Затем onchange событие использовать 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>
0 голосов
/ 20 мая 2011

Возможно, вы можете попытаться сохранить старое значение с помощью события «onfocus», чтобы впоследствии сравнить его с новым значением с событием «onchange».

0 голосов
/ 15 декабря 2009

Может быть, вы можете сохранить предыдущее значение текстового поля в скрытом текстовом поле. Затем вы можете получить первое значение из скрытого и последнее значение из самого текстового поля. Альтернатива, связанная с этим, при событии onfocus вашего текстового поля устанавливает значение вашего текстового поля в скрытое поле, а при событии onchange читает предыдущее значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...