我想知道一个表单是否有任何更改。该表单可以包含任何表单元素,例如input, select, textarea等。基本上,我想要一种方式向用户显示他们对表单所做的未保存更改。
如何使用jQuery实现这个功能? 澄清一下:我想捕获表单的所有更改,不仅仅是对输入元素的更改,还包括所有其他表单元素,例如textarea,select等。
如何使用jQuery实现这个功能? 澄清一下:我想捕获表单的所有更改,不仅仅是对输入元素的更改,还包括所有其他表单元素,例如textarea,select等。
在这种情况下,我通常采用的方法是检查序列化表单值。其思想是使用$.fn.serialize
方法计算初始表单状态。然后需要时,只需将当前状态与原始序列化字符串进行比较。
为了针对表单中的所有输入元素(选择、文本区域、复选框、输入文本等),您可以使用伪选择器:input
。
例如:
var $form = $('form'),
origForm = $form.serialize();
$('form :input').on('change input', function() {
$('.change-message').toggle($form.serialize() !== origForm);
});
.change-message {
display: none;
}
<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>