我正在创建一个在线测验应用程序。
- 测验
- 有一个计时器,当用户开始测验时,它将开始倒计时。
- 用户应该在完成测验时提交答案。
- 如果他的时间用完了,答案会自动提交。
现在我需要的是
- 当用户开始测验时,我需要限制他打开其他选项卡或窗口(以避免使用谷歌或任何其他他可以搜索答案的来源)。 即,限制他最小化测验窗口或打开任何新选项卡/窗口/应用程序
或
- 如果他碰巧离开了测验窗口(意味着他打开了一个新窗口或其他东西),答案应该会自动提交,下次他回到测验页面时应该显示结果页面。
假设这个问题不需要我使用的代码,因为这个问题是一般性的。如果确实需要代码,对不起,请告诉我,我会在这里发布。如果这是一个重复的问题,我很抱歉。我尝试搜索,但我真的不知道我应该寻找什么关键字。
任何帮助,不胜感激。
正如 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
});