本文介绍如何利用JavaScript的onbeforeunload事件结合jQuery,在用户尝试关闭或离开当前页面时检测表单元素是否发生修改。通过对比元素的_value属性与当前值,判断内容是否变更,并在检测到未保存修改时弹出确认对话框,防止用户误操作导致数据丢失。
以上即为完整的代码实现部分。
JavaScript表单修改检测实现
具体实现代码如下:
首先,我们需要监听页面的beforeunload事件,该事件在用户即将离开页面时触发。代码如下:
在onbeforeunload回调函数中,我们调用一个自定义函数is_form_changed()来判断表单状态。如果该函数返回真值,则执行后续逻辑。
当检测到表单确实被修改时,返回一段提示文字:“您的修改内容还没有保存,您确定离开吗?”,浏览器将据此显示标准的离开确认弹窗。
}
}
接下来定义is_form_changed()函数,用于核心判断逻辑。
在函数内部,首先通过jQuery选择器查找ID为t_save的元素,以此作为页面是否具备保存功能的检测依据。
如果检测到该保存按钮存在(即长度大于0),则继续执行对表单元素的修改检测;若不存在,则默认认为无需保存。
初始化一个布尔变量is_changed为false,用于标记是否发现任何修改。
使用jQuery选取ID为A4容器下的所有input、textarea和select元素,并遍历每一个元素进行检查。
在遍历过程中,获取当前元素的_value属性值,该属性通常用于存储初始值。
如果_value属性不存在(即undefined),则将其默认值设为空字符串,以避免后续比较出错。
将获取到的_value值与当前元素的实际值(通过.val()获取)进行比较。如果两者不相等,说明用户修改了内容,将is_changed设为true。
});
注意:在.each()遍历中直接return is_changed并不能中断遍历或返回给外层函数,此处代码逻辑存在瑕疵,实际应通过遍历结束后返回is_changed变量的值来判断。
}
遍历结束后,函数应返回is_changed的状态。若为true,表示有修改;若为false,表示无修改。
}
最后,在文档加载完成后执行初始化代码,确保所有元素就绪。
再次选取ID为A4下的所有input、textarea和select元素进行遍历。
在遍历过程中,将每个元素的当前值(.val())设置为其_value属性,从而初始化或重置这些元素的初始状态值,以便下次检测使用。
});
});