日期:2014-05-17 浏览次数:20927 次
如何检测HTML表单已经发生改变
表单是Web应用不可缺少的功能,它是服务器端与浏览器端数据交换的最基本的方法。你应该已经读过很多关于HTML5和Javascript的表单标签和数据验证的文章,然而今天我们来讨论下如何检查表单数据是否被改变了。
有很多理由需要检测表单数据是否有修改,让我们来看一个很常见的场景,如果用户修改了一个或多个表单域的值,当用户跳离当前页面时,你会给出用户类 似“你的修改尚未保存”的提示。你甚至可以给出用户是否保存数据(比如Ajax)的选项。另外的情况,如果表单项没有被修改,这时略去冗余的表单验证和数 据发送将会增强用户体验。
为HTML表单元素添加onchange事件处理器是一种可行的方法,这也是用的最多的,但是onchange的实现有一些问题存在:
幸运的是,我们不需要为了复杂的事件处理而写过多的废话,每个表单元素都有与该对象相关联的默认值,即页面加载完后表单控件显示或者默认的数据值,该值可与用户操作后的值进行对比以得出表单域的值是否发生了改变。
有点不幸的是,不同类型的表单元素的默认值属性(properties)不尽相同(做些判断好了,并不影响什么)
让我们从简单的元素开始,所有的textarea对象和除了checkbox、radio之外的?input对象都有一个名为defaultValue的属性,我们可以对比文本域的当前值和默认值是否相同以决定文本域的修改是否发生。
<!--?name?input?-->
|
<
input
?type
=
"text"
?id
=
"name"
?name
=
"name"
?value
=
"www.csser.com"
?/>
|
<
script
>
|
var?name?=?document.getElementById("name");
|
if?(n.value?!=?n.defaultValue)?alert("#name?has?changed");
|
</
script
>
|
小提示 :HTML4 或XHTML中,文本域类型为text、hidden、password或file的对象有defaultValue属性。HTML5新的表单类型也有 defaultValue属性并且可以用相同的方式检测默认值是否改变过,这些新表单元素包含email、tel、url、range、date、 color和search。
checkbox和radio对象有一个defaultChecked属性,其取值为true或false,我们可以通过对比当前选中状态与默认选中状态进行比较,如:
<!--?newsletter?opt-in?-->
|
<
input
?type
=
"checkbox"
?id
=
"optin"
?name
=
"optin"
?checked
=
"checked"
?/>
|