使用jQuery,如何找到表单是否已更改?

Web*_*urk 23 javascript jquery

我想知道表单是否已经发生了变化.表单可以包含任何表单元素,例如input,select,textarea等.基本上我想要一种向用户显示他们对表单进行了未保存更改的方法.

我怎么能用jQuery做到这一点?

澄清一下:我想抓住对表单的任何更改,不仅要输入元素,还要注意所有其他表单元素,textarea,select等.

dfs*_*fsq 68

我通常在这种情况下采用的方法是检查序列化的表单值.所以我的想法是你用$.fn.serialize方法计算初始形态.然后在需要时,您只需将当前状态与原始序列化字符串进行比较.

要在表单中定位所有输入元素(选择,文本区域,复选框,输入文本等),您可以使用伪选择器:input.

例如:

var $form = $('form'),
    origForm = $form.serialize();

$('form :input').on('change input', function() {
    $('.change-message').toggle($form.serialize() !== origForm);
});
Run Code Online (Sandbox Code Playgroud)
.change-message {
    display: none;
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form>
    <div class="change-message">You have unsaved changes.</div>
    <div>
        <textarea name="description" cols="30" rows="3"></textarea>
    </div>
    <div>Username: <input type="text" name="username" /></div>
     <div>
        Type: 
        <select name="type">
            <option value="1">Option 1</option>
            <option value="2" selected>Option 2</option>
            <option value="3">Option 3</option>
        </select>
    </div>
    <div>
        Status: <input type="checkbox" name="status" value="1" /> 1
        <input type="checkbox" name="status" value="2" /> 2
    </div>
</form>
Run Code Online (Sandbox Code Playgroud)

  • 那么你需要一种比较**所有**形式元素值的方法.我刚刚发现序列化是非常方便的方法.它只有一行代码.而这个字符串只取决于输入值,正是我们需要的.当用户恢复更改时,它也能正常工作.序列化字符串也会恢复为原始值. (3认同)
  • 效果很好.谢谢. (2认同)