0

我想启动/显示timer提交按钮事件。我正在使用弹簧 mvc。因此,在提交时,它会转到控制器,执行一些逻辑并重定向回原始 jsp 页面。问题是当从控制器重定向时,定时器在页面加载时被重置。一旦定时器启动,它不应该是重置,直到单击停止计时器按钮。我怎样才能实现这个功能?我正在使用一个 jquery 计时器插件,但它不是很有效。我尝试添加一个counter=0值,它也不正确。这是我的代码:

var counter=0;

function updatecounter(){
    counter = 1;
    Example1.init();
}

var Example1 = new (function() {

    var $stopwatch, 
        incrementTime = 70, 
        currentTime = 0,
        updateTimer = function() {
            $stopwatch.html(formatTime(currentTime));
            currentTime += incrementTime / 10;
        };

    this.init = function() {
        $stopwatch = $('#stopwatch');
        Example1.Timer = $.timer(updateTimer, incrementTime, true);
    };

    this.resetStopwatch = function() {
        currentTime = 0;
        this.Timer.stop().once();
    };

    if(counter!=0){
        $(init);
    }
});

HTML 标记:

<h2><span id="stopwatch">00:00:00:00</span></h2>

<input type="submit" value="Run Script" name="Run Script" class="button"onclick='updatecounter();' />

<input type="submit" value="Stop Script" name="Stop Script" class="button" onclick='Example1.resetStopwatch();/>
4

3 回答 3

1

我不会尝试创建整个应用程序堆栈,所以我会保持简单。

如果您必须重定向到 Spring Controller,那么您将不得不

  1. 将页面的开始时间传递回控制器
  2. 将相同的开始时间从控制器传回原始页面
  3. 检查页面加载的开始时间和
    • 启动计时器
    • 将时间添加到计时器,等于从服务器报告的开始时间与现在之间的差

所以在伪代码中:

if( startTime IS set ){
    timer.start();
    timer.setStartTime( startTime );
}

这将假设您的计时器只是计算与开始时间的差异以显示计数。

但是,更好的选择是页面不重定向到服务器。
只需发送一个 AJAX 请求并让它随时返回,您就可以让您的计时器一直运行。

"I need this thing to happen at the same time another thing is happening!"这是最有意义的,因为您的问题 ( )的本质是Asynchronous ,这是AJAX中的A。

于 2013-11-08T20:41:56.527 回答
0

试试这个人的建议

会话变量

于 2013-11-08T20:37:52.510 回答
0

好的,最后我想出了一种修复它的方法。在提交时,我在服务器端创建了一个标志,并在页面加载时将其传递给 jsp。根据标志,它会自动启动计时器。由于它是一个快速的过程,(转发到控制器并重定向回 jsp)时间延迟可以忽略不计。

于 2013-11-20T17:20:40.283 回答