Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检查web表单值是否已更改_Javascript_Html_Webforms - Fatal编程技术网

Javascript 检查web表单值是否已更改

Javascript 检查web表单值是否已更改,javascript,html,webforms,Javascript,Html,Webforms,我有一个多步骤表单,用户可以导航到任何页面来修改或添加信息。有一个菜单,显示当前进度、用户已完成的步骤,并允许导航到任何已完成或挂起的步骤 尽管有一个大按钮“保存并继续”,一些用户还是单击此菜单来进一步导航。我必须检查表单中的值是否已更改,并询问:“保存更改?是/否” 您建议我检查表单值是否已更改的最佳方法(使用最少的客户端JavaScript代码)是什么 稍后编辑: 我忘了告诉您多步骤表单在步骤之间使用回发。jQuery“脏表单”插件可能会在这里帮助您: 在这种情况下,应该很有用 如果没有JQ

我有一个多步骤表单,用户可以导航到任何页面来修改或添加信息。有一个菜单,显示当前进度、用户已完成的步骤,并允许导航到任何已完成或挂起的步骤

尽管有一个大按钮“保存并继续”,一些用户还是单击此菜单来进一步导航。我必须检查表单中的值是否已更改,并询问:“保存更改?是/否”

您建议我检查表单值是否已更改的最佳方法(使用最少的客户端JavaScript代码)是什么

稍后编辑:

我忘了告诉您多步骤表单在步骤之间使用回发。

jQuery“脏表单”插件可能会在这里帮助您:

在这种情况下,应该很有用


如果没有JQuery,这并不完全容易,因为表单的
onchange
事件在浏览器中不受一致支持

如果可以的话,可以使用其他答案中提供的jQuery插件之一

如果jQuery是不可能的,考虑添加一个简单的<代码> OnChchange =“如果(TH.Value=这个.Debug值)DurTyBigFalk=真;”<编码>到每个输入元素。如果您想要干净的方法,请在

部分执行此操作:

document.getElementById("formid").onchange = 
 function() { if (this.value ....) }

既然您提到要在两个步骤之间发回,我就有一个隐藏字段来存储下一步是什么。默认情况下,这将是表单的下一步。“保存并继续”按钮只是提交表单

然后,每个菜单项都会将此隐藏表单的值设置为适当的步骤,然后提交表单。比如:

<script type="text/javascript">
function goToStep(step) {
document.getElementById("hiddenFieldID").value = step;
document.getElementById("formID").submit();
}
</script>

<ul id="menu">
  <li><a href="javascript:goToStep(1);">Step 1</a></li>
  <li><a href="javascript:goToStep(2);">Step 2</a></li>
  etc...
</ul>

函数goToStep(步骤){
document.getElementById(“hiddenFieldID”)。值=步骤;
document.getElementById(“formID”).submit();
}

尝试像这样检查表单值。 initFormChangeCheck()的调用将所有值复制到镜像对象中,并在调用checkChange例程的每个表单元素上设置mousedown和keydown事件。 你也可以每隔一段时间检查一下

var fList = new Object();
function initFormChangeCheck() {
  for (var fOi = 0; fOi < document.forms[0].elements.length; fOi++) {
    el = document.forms[0].elements[fOi];
    fList[el.name] = el.value;
    el.onmousedown = checkChange;
    el.onkeydown = checkChange;
  }
}
function checkChange() {
  var changed = false;
  for (var fOi = 0; fOi < document.forms[0].elements.length; fOi++) {
    el = document.forms[0].elements[fOi];
    if (fList[el.name] != el.value) {
      changed = true;
    }
  }
  document.forms[0].show_invoice.disabled = changed;
}
var fList=new Object();
函数initFormChangeCheck(){
对于(var fOi=0;fOi
彼得

需要更多信息。表单的每个页面都是单独的URL吗?他们在浏览表单时是否来回发布?或者完全是客户端使用jquery或javascript?另外,您使用的服务器端语言是什么?PHP?轨道?python等等,对不起,我提到了javascript客户端代码onlyNice插件。对不起,我忘了告诉你我的多步骤表单在两步之间使用回邮。非常感谢。它看起来很有希望:)我将给出一个tryPlugin,它似乎不是很灵活,所以我不得不稍微修改一下代码。但无论如何,这节省了我很多时间。谢谢你的回答:)它似乎有缺陷,也)没有真正使用过它-刚才快速查看了一下,如果有问题,很抱歉。谢谢你的回答,但这正是我担心的:)我会看一看:谢谢,但问题是如何检查表单是否脏)