如何使用文本框中的onchange()事件获取旧值

时间:2009-12-15 20:01:29

标签: javascript html validation

页面加载时,我有一个文本框和值。 现在,如果用户在文本框中查找任何内容,那么我想获得更改值(新值)和旧值 但是当我做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 个答案:

答案 0 :(得分:156)

您需要手动存储旧值。你可以用很多不同的方式存储它。您可以使用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>

答案 1 :(得分:67)

element.defaultValue会为您提供原始值。

请注意,这仅适用于初始值。

如果您需要在每次更改时保留“旧”值,则expando属性或类似方法将满足您的需求

答案 2 :(得分:5)

您应该使用HTML5数据属性。您可以创建自己的属性并在其中保存不同的值。

答案 3 :(得分:3)

我建议:

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

  //we have available old value here;
}

答案 4 :(得分:2)

我曾经使用过的一个肮脏技巧,就是将变量隐藏在'name'属性中(我通常不会将其用于其他用途):

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

出乎意料的是,旧值和新值都会提交到someFunction(oldValue,newValue)

答案 5 :(得分:2)

我不确定,但也许这种逻辑可行。

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);
*/

答案 6 :(得分:0)

也许您可以将文本框的先前值存储到隐藏文本框中。然后,您可以从隐藏中获取第一个值,从文本框本身获取最后一个值。与此相关的替代方法是,在文本框的onfocus事件中,将文本框的值设置为隐藏字段,并在onchange事件中读取之前的值。

答案 7 :(得分:0)

也许您可以尝试使用“onfocus”事件保存旧值,然后使用“onchange”事件将其与新值进行比较。

答案 8 :(得分:0)

您可以这样做:将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>