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

IT技术 javascript html validation
2021-03-08 06:54:26

我有一个文本输入。页面加载时会填充一个值。如果用户在文本框中更改了任何内容,那么我想获取更改后的值(新值)和旧值。但是调用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>
6个回答

您需要手动存储旧值。你可以用很多不同的方式存储它。您可以使用 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>
@GrijeshChauhan:不。我们将旧值设置为焦点。之后,每次更改后,我们都会重新设置。
2021-04-18 06:54:26
如果您多次操作该值,这会更有效。上面的答案 (element.defaultValue) 只能工作一次。上这个 :)
2021-04-19 06:54:26
我可以理解,如果答案不起作用,或者答案不合适,您会否决答案。我提供了一个解决用户需求的答案。这段代码已经过测试。它是完整的。它做了一些被接受的答案没有做的事情(你总是可以查看 defaultValue 属性,但是如果用户多次更改值怎么办?)。
2021-05-07 06:54:26
此处建议的更改不正确。首先,一旦发生警报,​​该领域就失去了焦点。之后的任何更改都将在触发 onfocus 事件后发生。其次,输入字段的 onchange 事件在失去焦点之前不会触发。
2021-05-14 06:54:26
简单有效。希望我能给你的不仅仅是+1。
2021-05-14 06:54:26

element.defaultValue 会给你原来的value。

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

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

element.defaultValue 返回在 <input> 标签中设置的值。如果此值已通过编辑或其他一些 JavaScript 更改, element,defaultValue 将不会返回此(新)旧值。
2021-04-21 06:54:26
感谢 SabreWolfy,发现您的评论并解决了我的问题。不得不多次更改该值,因此执行上述操作并不好。
2021-04-22 06:54:26
只是一个注释。我在 firefox 上发现 element.getAttribute("value") 似乎也揭示了原始内容......我不知道这是否是跨浏览器/标准的东西。
2021-05-10 06:54:26

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

我会建议:

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

  //we have available old value here;
}

我有时使用的一个肮脏的技巧是将变量隐藏在 'name' 属性中(我通常不用于其他目的):

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

有点出乎意料的是,旧值和新值都被提交给 someFunction(oldValue,newValue)

这对我来说很好用:` onFocus="this.oldValue = this.value;"` 来自: pretagteam.com/question/...(是的,你回答这个问题已经十年了)
2021-04-18 06:54:26