Jquery 如何在Javascript中检查变量是否为超时?

Jquery 如何在Javascript中检查变量是否为超时?,jquery,settimeout,Jquery,Settimeout,我决定将此代码包含到一个对象中,以将其与将要应用的区域分开。这里的任何建议都非常感谢: appConfig.loadElement和appConfig.cerrorElement是以下HTML元素: <div id="loading" style="display:none;">Loading...</div> <div id="cerror" style="display:none;">Connection Error.</div> var

我决定将此代码包含到一个对象中,以将其与将要应用的区域分开。这里的任何建议都非常感谢:

appConfig.loadElement和appConfig.cerrorElement是以下HTML元素:

<div id="loading" style="display:none;">Loading...</div>
<div id="cerror" style="display:none;">Connection Error.</div>


var loadingTimeoutInstance = null, cerrorTimeoutInstance = null,
    requestObj = {
    reset: function() {
        $(appConfig.loadElement).hide();
        $(appConfig.cerrorElement).hide();
        clearTimeout(loadingTimeoutInstance);
        clearTimeout(cerrorTimeoutInstance);
    },
    initiate: function() {
        loadingTimeoutInstance = setTimeout(requestObj.timeout, appConfig.loadingDelayMS);
    },
    timeout: function () {
        clearTimeout(loadingTimeoutInstance);
        $(appConfig.loadElement).show();
        cerrorTimeoutInstance = setTimeout(requestObj.cerror, appConfig.cerrorDelayMS);
    },
    cerror: function () {
        clearTimeout(cerrorTimeoutInstance);
        $(appConfig.loadElement).hide();
        $(appConfig.cerrorElement).show();
    }
}
返回响应后:

requestObj.reset();
我发现的问题主要在requestObj.reset()中: -如果元素已经隐藏,为什么要隐藏它们?
-如果超时变量(loadingTimeoutInstance和cerrorTimeoutInstance)尚未设置为超时,则无法清除它们-这会导致它无法工作。

您实际上不需要检查它是否属于某种类型。。。就是这样


if(cerrortimeoutstance)clearTimeout(cerrortimeoutstance)

您实际上不需要检查它是否属于某种类型。。。就是这样


if(cerrortimeoutstance)clearTimeout(cerrortimeoutstance)

您甚至不需要这张支票<如果传递了
null
undefined
“巧克力好”
,则code>clearTimeout
将愉快地“什么也不做”。然而,谨慎地指出,超时ID被遗忘了,因为它在技术上可以重复使用。。。(我想大多数实现都会让这个“很难做到”,但还没有检查。)pst的进一步评论是,在调用
clearTimeout(cerrorTimeoutInstance)
之后,变量
cerrorTimeoutInstance
仍将保持相同的值(它只是一个用作ID的数字)。无法判断给定ID的超时是否已运行或之前已清除,尽管pst暗示不太可能重复使用相同的ID,因此可以安全地为相同的ID再次调用
clearTimeout()
。您甚至不需要此检查<如果传递了
null
undefined
“巧克力好”
,则code>clearTimeout
将愉快地“什么也不做”。然而,谨慎地指出,超时ID被遗忘了,因为它在技术上可以重复使用。。。(我想大多数实现都会让这个“很难做到”,但还没有检查。)pst的进一步评论是,在调用
clearTimeout(cerrorTimeoutInstance)
之后,变量
cerrorTimeoutInstance
仍将保持相同的值(它只是一个用作ID的数字)。无法判断给定ID的超时是否已运行或之前已清除,尽管pst暗示不太可能重复使用相同的ID,因此可以安全地为相同ID再次调用
clearTimeout()
。通常“重新隐藏”元素没有问题;它保存了一个检查(不会改变语义),因为只关心最终状态。最后一点是令人困惑的:“如果他们还没有设置为超时…导致它无法工作”。。。它以什么方式不起作用?有一个fiddle测试用例吗?我不知道为什么在清除未设置的超时时它不工作。我曾经有过几次这样的问题,这个案子就是其中之一。不过,阿伦的解决方案效果很好。关于隐藏一个已经隐藏的元素,这让我很困扰,因为这在逻辑上没有意义,我知道结果不会受到影响。感谢您的建议:)通常“重新隐藏”元素没有问题;它保存了一个检查(不会改变语义),因为只关心最终状态。最后一点是令人困惑的:“如果他们还没有设置为超时…导致它无法工作”。。。它以什么方式不起作用?有一个fiddle测试用例吗?我不知道为什么在清除未设置的超时时它不工作。我曾经有过几次这样的问题,这个案子就是其中之一。不过,阿伦的解决方案效果很好。关于隐藏一个已经隐藏的元素,这让我很困扰,因为这在逻辑上没有意义,我知道结果不会受到影响。谢谢你的建议:)
requestObj.reset();