1

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

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

现在我需要的是

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

或者

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

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

任何帮助表示赞赏。

4

3 回答 3

2

正如 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);
});
于 2013-09-06T10:46:58.937 回答
1

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

但是,有一个解决方案可以检查窗口是否有焦点:JavaScript / jQuery: Test if window has focus

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

于 2013-09-06T10:08:46.073 回答
0

你可以使用 jQuery http://jquery.com/

$(window).blur(function(){
  //your code here
});
$(window).focus(function(){
  //your code
});
于 2013-09-06T10:08:11.833 回答