在关闭之前强制执行行

时间:2016-05-27 16:41:53

标签: javascript closures

我有以下代码

(function() {
    var weather = new Weather();
    var input = document.getElementById("inputCity");
    var weatherHolder = document.getElementsByClassName("weather");
    var loading = document.getElementById("loadingSign");

    input.focus();

    input.onkeyup = function(e) { 
        if (e.keyCode == 13 && input.value != "") {
            loading.classList.remove("hidden");
            weather.getWeather(input.value, function (returnValue) {
                for (iter in returnValue) {
                    weatherHolder[iter].classList.remove('hidden');
                    document.getElementById("weather" + (parseInt(iter) + 1)).innerHTML = returnValue[iter].date; 
                }
            });
            loading.classList.add("hidden");
        }
    };
})();

我想强制执行行loading.classList.remove("hidden");,然后再等待完成后的闭包。

如果我删除了闭包线,那么脚本可以完美地工作,但是,如果闭包失败,我就无法使它工作。

例如,下面的代码完美无缺:

(function() {
    var weather = new Weather();
    var input = document.getElementById("inputCity");
    var weatherHolder = document.getElementsByClassName("weather");
    var loading = document.getElementById("loadingSign");

    input.focus();

    input.onkeyup = function(e) { 
        if (e.keyCode == 13 && input.value != "") {
            loading.classList.remove("hidden");
            alert("teste");
            loading.classList.add("hidden");
        }
    };
})();

问题在于loading.classList.remove("hidden");行。这应该删除一个隐藏消息和微调器的类。如果我用微调器显示的警告替换闭合线,但是,如果我有闭包函数,则不会显示微调器。

如果闭包是否成功,我如何强制调用该行?

1 个答案:

答案 0 :(得分:1)

我真的不明白这个问题但是从你的代码判断,在回调中添加loading.classList.add("hidden");以便正确执行它会更明智。

(function() {
    var weather = new Weather();
    var input = document.getElementById("inputCity");
    var weatherHolder = document.getElementsByClassName("weather");
    var loading = document.getElementById("loadingSign");

    input.focus();

    input.onkeyup = function(e) { 
        if (e.keyCode == 13 && input.value != "") {
            loading.classList.remove("hidden");
            weather.getWeather(input.value, function (returnValue) {
                for (iter in returnValue) {
                    weatherHolder[iter].classList.remove('hidden');
                    document.getElementById("weather" + (parseInt(iter) + 1)).innerHTML = returnValue[iter].date; 
                }
                // Here
                loading.classList.add("hidden");
            });
        }
    };
})();

好的,所以你要求“强制执行...”但实际上我怀疑这里发生的是:我们移动的线路并没有“等待”getWeather完成。