Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.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
Javascript 暂停计时器_Javascript - Fatal编程技术网

Javascript 暂停计时器

Javascript 暂停计时器,javascript,Javascript,我有一个带有两个标签的页面,每30秒通过计时器刷新一次。选择tab-1或编辑数据时,我需要暂停/取消它,并在选择tab-0或保存编辑时重新启动它 timer变量在.html文件中,对start/stop的调用在.js文件中 HTML文件: <script> var interval = setTimeout(function() { window.location.reload(1); }, 30000); &l

我有一个带有两个标签的页面,每30秒通过计时器刷新一次。选择tab-1或编辑数据时,我需要暂停/取消它,并在选择tab-0或保存编辑时重新启动它

timer变量在.html文件中,对start/stop的调用在.js文件中

HTML文件:

    <script>
        var interval = setTimeout(function() {
            window.location.reload(1);
        }, 30000);
    </script>
但是,编辑计时器停止不起作用:

jQuery.ajax({
    url: 'HandbookServlet',
    type: 'POST', data: {formType: "getRecord",
        id: id
    },
    dataType: 'json',
    async: false,
    success: function(responseText) {
        var obj = JSON.stringify(responseText);
        var obj2 = JSON.parse(obj);
        jQuery('#lblEditDate').text(obj2.strDateSigned);
        jQuery('#taEditComment').val(obj2.comment);
        jQuery('#divAlert').show();
        window.clearInterval(interval); //stop timer doesn't work here

    }, error: function(request, status, error) {
        alert("An error occurred.  Error:  " + status + ", " + error);
    }
});

没有生成错误。“window.clearInterval”是否仅通过“jQuery(document).ready”起作用?

问题不在于范围或计时器本身(而是“操作员顶空和计时”)

问题是编辑按钮在tab0上(我的原始问题中没有提到)。单击该按钮时,事件传播到选项卡,触发document.ready中的代码,并在函数中停止计时器后重新启动计时器

为了解决此问题,我将click事件发送给函数,并使用event.stopPropagation()防止选项卡拾取click:

function displayRecord(e, id) {
    e.stopPropagation();
    stopTimer();
    jQuery.ajax({
        url: 'HandbookServlet',
        type: 'POST', data: {formType: "getRecord",
            id: id
        },
        dataType: 'json',
        async: false,
        success: function(responseText) {
            var obj = JSON.stringify(responseText);
            var obj2 = JSON.parse(obj);

            jQuery('#itemId').val(id);
            jQuery('#lblEditDate').text(obj2.strDateSigned);
            jQuery('#taEditComment').val(obj2.comment);
            jQuery('#divAlert').show();
        }, error: function(request, status, error) {
            alert("An error occurred.  Error:  " + status + ", " + error);
        }
    });
}

这回答了你的问题吗@乌布雷克:不太好。计时器停止确实起作用,但仅在文档就绪代码中起作用。在使用ajax调用的函数中,它不起作用。在我看来,这可能是一个范围问题。您的
间隔在哪里定义?您在Ajax成功回调中访问的
interval
是否与在中存储
setTimeout
引用的
interval
相同?@AlainDoe:该变量在.html文件中设置。文档就绪和ajax函数位于.js文件中。(我已经用这些信息更新了这个问题)但是,它在文档准备中确实有效。如果变量可以在那里看到,那么它不应该在ajax函数中看到吗?首先,
clearTimeout
clearInterval
是不可互换的。您不能使用
clearInterval
停止
setTimeout
。第二在
中单击
-处理程序,使用新值覆盖
间隔
,而不停止上一个值;类似于上一次单击或html文件中的单击。清除一个不再存在的超时没有害处。
function displayRecord(e, id) {
    e.stopPropagation();
    stopTimer();
    jQuery.ajax({
        url: 'HandbookServlet',
        type: 'POST', data: {formType: "getRecord",
            id: id
        },
        dataType: 'json',
        async: false,
        success: function(responseText) {
            var obj = JSON.stringify(responseText);
            var obj2 = JSON.parse(obj);

            jQuery('#itemId').val(id);
            jQuery('#lblEditDate').text(obj2.strDateSigned);
            jQuery('#taEditComment').val(obj2.comment);
            jQuery('#divAlert').show();
        }, error: function(request, status, error) {
            alert("An error occurred.  Error:  " + status + ", " + error);
        }
    });
}