首页 > 解决方案 > 如何检查 form.reset() 是否改变了任何东西

问题描述

js中有没有办法检查reset()表单的功能是否真的改变了某些东西。重置将表单输入重置为默认值。但是如果当前值已经是默认值,我想注意到它reset()没有效果。万一reset()改变了我想调用的东西foo(),万一重置没有效果我想调用bar()。如果不比较之前和之后的每个输入字段,这是否可以优雅地实现?

标签: javascripthtmltypescript

解决方案


使用FormData的简短(但不是最好的)方法:

const form = document.forms[0];

function run() {
  const data = new FormData(form);
  form.reset();
  const resetData = new FormData(form);
  if (
   JSON.stringify([...data.entries()]) ===
   JSON.stringify([...resetData.entries()])
  ){
    console.log('foo');
  } else {
    console.log('bar');
  }
}
<form>
<input name=i1 />
<input name=i2 />
</form>
<button onclick="run()">Reset & Check</button>


推荐阅读