代码之家  ›  专栏  ›  技术社区  ›  ACP

stackoverflow如何使用jquery计算应答接受时间限制14分钟?

  •  2
  • ACP  · 技术社区  · 14 年前

    有人能帮我使用一个计时器完全像stackoverflow的答案接受14分钟的时间限制。如何在jquery中创建计时器并使用它?

    编辑:

    我正在做一个在线考试系统的时间限制是60分钟,我想显示一个警报的剩余分钟每10分钟。。如何在jquery中实现这一点?或者我应该把它移到服务器端。

    4 回复  |  直到 10 年前
        1
  •  7
  •   Nick Craver    14 年前

    他们不会用JavaScript来实现这一点(在很多情况下 不应该 在JavaScript中这样做 非常 容易规避)。 时间是一回事,实际上使用它进行有效性检查是另一回事。

    尝试 要接受答案,服务器会给出一个响应,说这还不是一个有效的操作,您所看到的只是一个错误消息的显示。

    如果你想显示倒计时,有一些插件已经很好的实现了这一点,或者按照定制的方式进行也不难, jQuery countdown

        2
  •  1
  •   Dead Programmer    14 年前

    我认为stackoverflow所做的是,当一个答案被提交时,一个唯一的id被生成,并且未来的时间戳(直到必须接受哪个答案)被保存在数据库中。服务器上可能有一个每五分钟运行一次的调度程序,它查询特定时间内提交的答案句号。如果futuretime currenttime>14则标志列设置为Y,表示需要立即注意的答案。当用户重新加载页面时,将检查标志并通知警报。

    否则,您可以使用服务器Push ajax并检查当前时间以及提交答案时存储在服务器数据库中的时间。

        3
  •  1
  •   met00    14 年前

    @尼克建议使用jquery倒计时-好主意

    function startquiz () {
    var austDay = new Date();
    var qtime = $('#quiz_time1').val(); // value in stored hidden input field
    austDay = +qtime+'s';
    $('#quizCountdown').countdown({until: austDay,
             layout: 'Quiz Time Remaining: {mn} {ml}, {sn} {sl} ',
             onExpiry: liftOff2
        });
    
    function liftoff2() {
         $('#quizpage, #pages').toggle(); /get rid of the quiz bring back instructs
         $('#quizCountdown').countdown('destroy');
    }
    } 
    
     function loadquiz(ptype) {   
       var sid = 'sid='+ $('#sid').val(); //these values are in hidden input fields  
       var grade = '&grade='+ $('#grade').val();   
       var adata = sid + grade +  ptype;  
       $("#pageside").slideUp("fast");  
       $.ajax({
         method: "get",url: "quiz.php",data: adata,
         beforeSend: function(){
              $("#loadingpage").show();}, //show loading just when link is clicked
         complete: function(){ 
              $("#loadingpage").hide();}, //stop showing loading when the process complete
         success: function(html){ //so, if data is retrieved, store it in html
             $("#loadingpage").hide(); 
             $("#quizpage").show("fast"); //animation
             $("#quizpage").html(html); //show the html inside #quizpage div
             setupform(); // set the quiz submission ajax
             startquiz(); // starts the quiz
             $('#pages').toggle(); // get the directions out of the way
        }  }); }
    

    现在,大部分的魔法都会出现在设置表单(setupform();)来管理提交的方式上。我们提供两种模式的定时测验。一次回答所有问题,一次回答一个问题。根据测验的方法,设置管理如何提交答案。你需要实现的一些事情。。。

    1) 当测验开始时,我们存储测验题目、学生ID和开始时间

        4
  •  1
  •   Jarrett Meyer    14 年前

    我会有一个显示剩余时间的部分结果或控件。然后我可以使用下面的jQuery语句来重新加载页面的该部分。

    <div id="timeRemaining">60 minutes</div>
    <script>
      var $timeRemaining = $("#timeRemaining"), url = "my/path/to/get/time";
      var updateTimeRemaining = function () { 
        $timeRemaining.load(url);
      };
      setInterval(updateTimeRemaining, 60000);      
    </script>
    

    编辑以反映尼克的评论。 *再次编辑*