我正在创建一个用户测验,每个问题的时间为3分钟。我怎样才能让用户无法按下或刷新,或者即使他们按下也没有任何反应,或者如果他们按下它就会得到一个消息,他们将获得0分。我尝试了一个警告框,但是当警报框打开时,时钟停止。任何人都知道如何实现这一目标?
答案 0 :(得分:2)
您可以尝试使用数据库而不是javascript来强制执行时间限制。
+-------+-----------+----------+--------+------+
|user_id|question_id|start_time|end_time|answer|
+-------+-----------+----------+--------+------+
你必须确保(user_id, question_id)
是唯一的,如果他们花费的时间超过3分钟,他们就会得到0。
这也可以让你阻止他们多次回答同一个问题。
答案 1 :(得分:0)
后退按钮行为取决于用户/浏览器,这意味着无法禁用后退按钮本身。有几种解决方法,例如打开一个新窗口并从父窗口引用计数器。但是禁用后退按钮本身是不可能的
答案 2 :(得分:0)
正如其他地方所建议的那样,您无法覆盖后退或刷新行为。但是,您可以在用户尝试离开页面时执行操作(例如弹出消息):
<body onbeforeunload="return confirm( 'If you leave this page, you will receive 0 points. Stay on page?' );">
请注意,此类干扰对用户来说很烦人,不应该用于一般受众。然而,在权威性测验的背景下,这可能是可以接受的。
另请注意,某些浏览器(例如Opera)不支持onbeforeunload.
您可能需要限制测试者可以使用的浏览器。
答案 3 :(得分:0)
如果您存储会话中显示的当前问题,即使用户点击它,也会始终显示他们所在的问题。
但这显然会重置(javascript)计时器。为了解决这个问题,请在同一会话中显示问题时存储时间戳,并确认在提交时可能是个主意。将其与George Cummins所述的javascript“onbeforeunload”相结合,告知用户他们行动的后果。
所以,在加载问题时:
$_SESSION['current_question']['id'] = $question['id'];
$_SESSION['current_question']['timestamp'] = time();
提交答案时:
if((time() - $_SESSION['current_question']['timestamp']) =< 180)
{
// Decide the amount of points earned
$score = ...
}
else
{
// User took more than 3 minutes, set score to 0;
$score = 0;
}