如何限制用户在没有特定操作的情况下离开页面(例如,单击提交按钮)


How to restrict a user from moving away from a page without a particular action(Say, clicking a submit button)

我正在创建一个在线测验应用程序。

    测验
  • 有一个计时器,当用户开始测验时,它将开始倒计时。
  • 用户应该在完成测验时提交答案。
  • 如果他的时间用完了,答案会自动提交。

现在我需要的是

  • 当用户开始测验时,我需要限制他打开其他选项卡或窗口(以避免使用谷歌或任何其他他可以搜索答案的来源)。 即,限制他最小化测验窗口或打开任何新选项卡/窗口/应用程序

  • 如果他碰巧离开了测验窗口(意味着他打开了一个新窗口或其他东西),答案应该会自动提交,下次他回到测验页面时应该显示结果页面。

假设这个问题不需要我使用的代码,因为这个问题是一般性的。如果确实需要代码,对不起,请告诉我,我会在这里发布。如果这是一个重复的问题,我很抱歉。我尝试搜索,但我真的不知道我应该寻找什么关键字。

任何帮助,不胜感激。

正如 Vlad Preda 所提到的,确保在 javascript 未激活时阻止表单提交。

也就是说,据

我所知,没有办法阻止用户试图在网页中使用一些javascript作弊。一种解决方案可能是警告他禁止哪些操作(例如调整窗口大小),然后在他违反这些规则之一时侦听可用的浏览器事件以取消测验。但是,似乎很难预测每种情况并使所有这些与每种浏览器兼容。

更简单的解决方案可能是显示一个接一个的问题,将焦点放在相关的表单字段上,然后在此字段失去焦点时立即关闭问题。您还可以在表单域在一段时间内失去焦点时禁用表单域。以下代码应该完成这项工作:

var intervalId;
var countDown = 10; // seconds
jQuery(formField).focus(function () {
    intervalId && clearInterval(intervalId);
});
jQuery(formField).blur(function () {
    intervalId = setInterval(function () {
        if (!(countDown--)) {
            alert('Too long to answer!');
        }
    }, 1000);
});

没有100%确定的方法可以做到这一点,因为Javascript可以被停用。

但是,有一个解决方案可以检查窗口是否有焦点:JavaScript/jQuery:测试窗口是否有焦点

当页面失去焦点时,您可以打开确认框以离开测验或所需的任何逻辑。

您可以使用 jQueryhttp://jquery.com/

$(window).blur(function(){
  //your code here
});
$(window).focus(function(){
  //your code
});