2

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

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.initiate();

返回响应后:

requestObj.reset();

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

4

1 回答 1

4

您实际上不需要检查它是否属于某种类型......只是它是。

if(cerrorTimeoutInstance) clearTimeout(cerrorTimeoutInstance);

于 2012-06-06T23:21:51.877 回答