我遇到了一个问题,我似乎无法解决问题,并且由于我在网上找不到此类示例的任何其他示例,因此我(再次)转向了这个优秀的社区。
我不会通过说明这个函数(和许多其他函数)在协同工作时设计的所有内容来使这个问题过于复杂,但是,我会说这个函数(eventDayPlotter)在每个月的每一天都重复。我不明白以下代码段中包含的结果。
function eventDayPlotter(day, gridMod, monthAdjust)
{
//Beginning of event day plotting.
isAnEvent = false;
$.getJSON("/JsonControl/Events.json", function (jsonObj)
{
for (var i = 0; i < jsonObj.events.length; ++i)
{
if(day == jsonObj.events[i].dateNumber && (navDate.getMonth() + monthAdjust) == (jsonObj.events[i].dateMonth -1) && navDate.getFullYear() == jsonObj.events[i].dateYear)
{
document.getElementById("cGrid" + gridMod).className="eventDay";
console.log(jsonObj.events[i].title)
document.getElementById("cGrid" + gridMod).onmousedown = function(){document.getElementById("eventBox").src="/Event htms/Event.htm"; document.getElementById("eventBox").document.getElementById("title").innerHTML = jsonObj.events[i].title;}
isAnEvent = true;
}
}
});
if(isAnEvent == true)
{
console.log("true")
}
if(isAnEvent == false)
{
console.log("false")
}
}
console.log 的结果(完整)
33false _main.js:1708
Okmulgee Public Schools County Professional Day _main.js:1696
Okmulgee Public Schools Starts 3rd Quarter _main.js:1696
Okmulgee Public Schools-Closed in Observance of Martin Luther King Jr. Holiday
我确实希望第一个 if 分支执行 3 次,但是,正如您所看到的,一旦诊断 if 分支(带有 console.logs 的分支)在 $.getJSON 函数之外(其中它们在逻辑上需要是,一旦它们包含有意义的内容)isAnEvent 总是错误的。我无法理解,因为它无论如何都没有超出范围(据我所知)。
另外,我不希望文件中的后面几行首先用 console.log 记录(在其他 3 行之前),但看起来这个函数正在向后执行?我的意思是,我知道这不可能是真的,但这怎么可能呢?我完全失去了...
当在第一个 if 分支内或在它之外(仍在 .getJSON 函数内)测试 isAnEvent 时,它的值并不总是它应该是的值(因为这不是他们在逻辑上需要去的地方),但它并不总是错误的但是,一旦在 .getJSON 函数之外,它始终为 false,即使它刚刚变为 true。
显然这里发生了一些我无法理解的事情。
最后,如果不是很明显,三件事:
1)我很好地抓取了 JSON 数据,并且
2)如果 json 文件中的任何日期与该日期匹配,则第一个 if 分支应该将 isAnEvent 设置为 true。然后下次调用 eventDayPlotter 时,它应该将 isAnEvent 重置为 false 并以相同的方式测试下一个日期(使用参数传入)。
3)控制台中没有显示脚本错误。
如果需要更多信息,请告诉我。