Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建一个jquery秒表,它从用户焦点开始,在焦点输出时停止,并开始一个新的计时器_Jquery_Jquery Selectors_Timer - Fatal编程技术网

创建一个jquery秒表,它从用户焦点开始,在焦点输出时停止,并开始一个新的计时器

创建一个jquery秒表,它从用户焦点开始,在焦点输出时停止,并开始一个新的计时器,jquery,jquery-selectors,timer,Jquery,Jquery Selectors,Timer,我正在开发一个简单的网络应用程序,允许用户对自己的数学问题进行测试。用户首先选择要解决的问题类型,然后选择要解决的问题数量 由于用户正在处理这些问题,我想计算一下完成每个问题所需的时间。这是在页面上显示问题的代码: function displayMult ($i) { echo '<table class="basic">'; for($k=0; $k < $i; ++$k) // display problems { $user_respon

我正在开发一个简单的网络应用程序,允许用户对自己的数学问题进行测试。用户首先选择要解决的问题类型,然后选择要解决的问题数量

由于用户正在处理这些问题,我想计算一下完成每个问题所需的时间。这是在页面上显示问题的代码:

function displayMult ($i)
{
echo '<table class="basic">';
    for($k=0; $k < $i; ++$k) // display problems
    {
        $user_response[$k] = 'user_response' . $k ;
        echo '<tr>';
        echo '<td>' . number_format($_SESSION['mult_one'][$k]) . '</td>';
        echo '<td>'. ' x ' . '</td>';
        echo '<td>' . number_format($_SESSION['mult_two'][$k]) . '</td>';
        echo '<td>' . ' =   <input type="text" class="field" name="user_response' . $k . '"' . 'id="u_r' . $k . '" />' . '</td>';
        echo '<td id="timer_' . $k . '">test</td>';
        echo '</tr>';
    }
echo '</table>';
}
我是jquery的新手,因此任何帮助和见解都将不胜感激!提前感谢。

第一部分: 您可能不想在stopwatch中返回函数,而是想在focus()调用中放入一个内联函数,该函数从字段中获取有关应该发送到哪个计时器的信息。如果您至少使用了jQuery 1.5,那么可以在HTML中设置一个属性,您可以使用jQuery.data()方法检索该属性

第二部分: 这里遇到的问题是,稍后调用计数和间隔句柄时,它们不在正确的范围内。实际上,只需再次使用.data()在计时器元素上存储开始时间,然后在每个字段的模糊事件上附加一个处理程序,以停止该事件并显示结果,就可以在没有间隔的情况下执行此操作

以下是PHP:

function displayMult ($i)
{
echo '<table class="basic">';
    for($k=0; $k < $i; ++$k) // display problems
    {
        $user_response[$k] = 'user_response' . $k ;
        echo '<tr>';
        echo '<td>' . number_format($_SESSION['mult_one'][$k]) . '</td>';
        echo '<td>'. ' x ' . '</td>';
        echo '<td>' . number_format($_SESSION['mult_two'][$k]) . '</td>';
        echo '<td>' . ' =   <input data-timer="#timer_' . $k . '" type="text" class="field" name="user_response' . $k . '"' . 'id="u_r' . $k . '" />' . '</td>';
        echo '<td id="timer_' . $k . '">test</td>';
        echo '</tr>';
    }
echo '</table>';
}
这是我的努力

var timer_id;

$(document).ready(function() {
    $('.field').focus(function() {
        $(this).addClass('active_input');
        timer_id = setInterval('tick()', 1000);
    }).blur(function() {
        $(this).removeClass('active_input');
        clearTimeout(timer_id);
    });
});

function tick() {
    var id_n = $('.active_input').attr('id').substring(3);
    var t_td = $('#timer_' + id_n);
    var t = parseInt(t_td.text(), 10);
    if (isNaN(t)) {
        t = '1 second';
    } else {
        t++;
        t += ' seconds'
    }
    t_td.text(t);
}

谢谢你,马吉德!这项工作做得很好,完全达到了我的目的。我感谢你抽出时间来帮忙!谢谢你花时间帮忙!我尝试了几次这段代码,但不幸的是它无法工作。考虑到我以前从未使用过.data(),我可能错过了一些东西。感谢你的努力。对不起,我发现了一些以前的错误,现在我已经改正了。
$(document).ready(function() {
    $('.field').focus(function() {
        var timer_id = $(this).data("timer");
        stopwatch("#" + timer_id);
    });
    $('.field').blur(function() {
        var timer_id = $(this).data("timer");
        stopwatch("#" + timer_id);
    });
});

function stopwatch(container_id) {
  var $container = $(container_id);
  var time_now = new Date();
  var time_started = $container.data("time");
  if (time_started) {
    time_taken = time_now - time_started; // This is in milliseconds
    $container.html(time_taken / 1000 + ' seconds');
  }
  else {
    $container.data("time", time_now);
  }
}
var timer_id;

$(document).ready(function() {
    $('.field').focus(function() {
        $(this).addClass('active_input');
        timer_id = setInterval('tick()', 1000);
    }).blur(function() {
        $(this).removeClass('active_input');
        clearTimeout(timer_id);
    });
});

function tick() {
    var id_n = $('.active_input').attr('id').substring(3);
    var t_td = $('#timer_' + id_n);
    var t = parseInt(t_td.text(), 10);
    if (isNaN(t)) {
        t = '1 second';
    } else {
        t++;
        t += ' seconds'
    }
    t_td.text(t);
}