我有一个vb.net应用程序,该应用程序中有提交报告的功能。
用户回答了报告中的所有问题后,单击“提交”按钮,并显示一个页面,该页面显示要求他们输入密码的表单-输入密码(两次输入-,密码”字段和“确认密码”字段),他们单击“继续”按钮,然后转到显示“报告已提交”消息以及已提交报告的案例编号的页面。此时,报告已提交,信息已记录在数据库中。
用户可以使用获得的案号和创建的密码重新登录系统,以检查其雇主已添加到其报告中的任何反馈。
但是,如果用户填写报告并单击“提交”按钮,或者单击浏览器的“后退”按钮,或者在查看报表时以另一种方式浏览页面,则会出现一个问题。 “输入密码”页面,将它们带回到填写报告的页面,并且所有先前输入的值仍显示在此处。
如果他们再次单击“提交”按钮(也许他们更改了先前输入的某些数据,也许没有),则将生成第二个报告,并且该信息将第二次记录在数据库中,因此这可能导致重复的记录
我想尝试防止用户在提交报告的两步过程中浏览页面。
我遇到了this的答案,并尝试在我的项目中实现它。
但是,当我现在单击“提交”以在完成后提交报告时,我的浏览器控制台会显示一条错误消息:
未捕获的ReferenceError:onload上未定义changeHashOnLoad(密码确认:118)
我在passwordconfirm.aspx中添加了函数调用:
<head runat="server">
...
<script>
$(document).ready(function () {
...
function changeHashOnLoad() {
console.log("changeHashOnLoad() called ");
window.location.href += "#";
setTimeout("changeHashAgain()", "50");
}
function changeHashAgain() {
window.location.href += "1";
}
var storedHash = window.location.hash;
window.setInterval(function() {
if (window.location.hash != storedHash) {
window.location.hash = storedHash;
}
}, 50);
...
});
</script>
</head>
<body onload="changeHashOnLoad(); ">
...
</body>
但是我不确定为什么在提交报告时会得到Uncaught ReferenceError
声明changeHashOnLoad is not defined
,并且加载了提交确认页面...
是因为HTML标记的onload
属性在HTML <script></script>
部分的<head></head>
标记内的代码之前运行?如果是这样,如何确保在页面加载时已经定义了changeHashOnLoad()
函数?我应该在哪里定义该函数?
或者,如果不是,那我在做什么错了?
答案 0 :(得分:2)
您要在document.ready回调函数中声明您的函数。这意味着您的哈希函数将在本地范围内,并且仅存在于该函数范围内。而是执行以下操作:
function changeHashOnLoad() {
console.log("changeHashOnLoad() called ");
window.location.href += "#";
setTimeout("changeHashAgain()", "50");
}
function changeHashAgain() {
window.location.href += "1";
}
$(document).ready(function () {
var storedHash = window.location.hash;
window.setInterval(function () {
if (window.location.hash != storedHash) {
window.location.hash = storedHash;
}
}, 50);
});