vb.net在head中定义的JS函数未在onLoad中定义

问题描述 投票:1回答:1

我有一个vb.net应用程序,在应用程序中,有提交报告的功能。

当用户回答了报告中的所有问题后,他们点击“提交”按钮,并显示一个页面,显示要求他们输入密码的表格 - 一旦输入密码(两次 - '密码'字段)在“确认密码”字段中,他们点击“继续”按钮,然后转到显示“报告已提交”消息的页面,以及他们提交的报告的案例编号。此时,报告已提交,并且信息记录在数据库中。

用户可以使用他们给出的案例编号和他们创建的密码重新登录系统,以检查他们的雇主已添加到他们的报告中的任何反馈。

但是,如果用户填写报告并单击“提交”按钮,如果他们单击浏览器“返回”按钮,或者在他们查看“输入密码”时以其他方式导航页面,则会出现问题'页面,它们被带回到填写报告的页面,并且它们之前输入的所有值仍然显示在那里。

然后,如果他们再次单击“提交”按钮(可能他们更改了先前输入的某些数据,可能没有),则会生成第二个报告,并且第二次将信息记录在数据库中 - 这样会导致重复记录。

我想尝试阻止用户在提交报告的两个步骤中导航回页面。

我在SO上遇到了this的答案,并尝试在我的项目中实现它。

但是,当我现在单击“提交”以在完成后提交报告时,我的浏览器控制台会显示错误消息:

未捕获的ReferenceError:onload未定义changeHashOnLoad(passwordconfirm: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()函数 - 我应该在哪里定义该函数?

或者,如果没有,我在这里做错了什么?

javascript html vb.net onload
1个回答
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);
});
© www.soinside.com 2019 - 2024. All rights reserved.