我正在尝试找出创建与在指定表单字段中键入相关联的计时器的最佳方法。
每当有人开始输入时,计时器就会启动。当该人停止打字进行洗手间休息,电话呼叫等时,计时器暂停并在该人再次开始打字时继续停止。一旦完成输入,他们就会点击提交按钮并记录时间。
有人建议使用JS OnFocus,但当有人离开办公桌一两分钟时,这不会停止计时器。其他人也建议超时限制但如果超时并且该人返回完成他们的输入会发生什么。
有关编码或在哪里寻找的任何建议都将受到赞赏。
答案 0 :(得分:1)
我认为你的标题有点误导,尽管你的帖子被正确标记了。这些(除非你使用AJAX)都不是PHP。你最好的可能是使用keyup或keydown事件的超时 - 每次触发事件时重启超时计时器。如果时间用完,则停止跟踪所有内容的全局计时器。我不确定我完全理解
其他人也提出了超时限制但如果超时则会发生什么 人回来完成他们的打字。
这不是主意吗?他们会采取某种休息,在此期间计时器会暂停,然后在他们返回时恢复?如果是这种情况,很难确定什么是“休息”与“完成”是什么。在这种情况下,您需要定义一些常量超时,之后假定它们已完成。否则,您可能需要根据某些用户操作点击或触发某种“我已完成”按钮或事件。
根据您的评论进行编辑:基本上,您有几个选项。如果要将时间数据存储在服务器上,则至少需要一个AJAX调用。单击“完成”按钮时将触发此操作。您将需要JS处理程序来处理keydown / keyup事件。这些可以触发AJAX调用,这反过来又启动/停止用PHP编写的服务器上的定时器。或者,您可以在JS中实现客户端上的这些启动/停止计时器。基本上,我看到的方式,(这是pesudocode,而不是实际的JS)
function keyDownHandler{
resumeGlobalTimer();
restartTimeOutTimer();
}
function timeout(){
pauseGlobalTimer();
}
function resumeGlobalTimer(){
if (globalTimerIsRunning)
//global timer wasn't paused, do nothing
else{
someTimer.resume();
globalTimerIsRunning = true;
}
}
所以基本上,当按下某个键时,你启动一个计时器,等待查看是否在时间限制内按下了另一个键,它还调用了一个恢复全局计时器的功能。如果在时间限制内按下某个键,则该超时计时器将重置为起始值并再次开始计时。如果它超时,则假定该人走开并暂停全局计时器。恢复功能检查以确保计时器尚未运行(即未暂停),然后尝试恢复计时器。
在一切结束时,AJAX调用会将最终的全局值上传到PHP。
希望这有帮助!