使用
jquery我已经添加了一个更改处理程序到窗体.
当任何输入被改变时,此功能是有效的,但只有当用户手动更改输入时,而不是当其他代码更改输入时.
当任何输入被改变时,此功能是有效的,但只有当用户手动更改输入时,而不是当其他代码更改输入时.
有没有办法检测表单是否已经改变,即使它的输入是通过代码更改的?
解决方法
是的,似乎有一些混乱.在一个理想的世界中,你会期望在交换事件发生时,只要输入变化,但不是会发生什么.我确信有很好的理由 – 也许不是.
克服这个障碍的一个方法是在显示之后将表单状态捕获到变量中,然后在提交它之前,检查状态是否已更改,并相应地采取行动.
一个易于存储的状态是serialize函数返回的.存储状态的简单方法是使用数据功能. serialize和data都可以使用jquery.
当然,您可以使用其他不同形式的状态(某种形式的散列)或存储此状态(例如标准全局变量).
这里有一些原型代码:
如果您的表单id为“xform”,则可以在窗体显示时调用以下代码:
$('#xform').data('serialize',$('#xform').serialize());
然后,当您需要检查时,例如在按钮提交之前,您可以使用:
if($('#xform').serialize()!=$('#xform').data('serialize')){ // Form has changed!!! }
你可以把它全部包装成一个副本&粘贴JavaScript代码片段,它将为您提供一个formHasChanged()函数来调用,无论您需要它(NOT TESTED):
$(function() { $('#xform').data('serialize',$('#xform').serialize()); }); function formHasChanged(){ if($('#xform').serialize()!=$('#xform').data('serialize')){ return(true); } return(false); }
但是我会停止这里,否则我将创建另一个jquery插件.