我有以下代码
(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");
行。这应该删除一个隐藏消息和微调器的类。如果我用微调器显示的警告替换闭合线,但是,如果我有闭包函数,则不会显示微调器。
如果闭包是否成功,我如何强制调用该行?
答案 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
完成。