Javascript 代码不';你跑得不整齐吗?对DOM的更新是否同时发生?
我在按顺序运行代码时遇到了一些问题。基本上,我有一个隐藏元素的函数,控制台记录一条消息,然后运行另一个函数,对DOM进行缓慢而大规模的更改 理想情况下,隐藏首先发出用户响应的信号,然后他们可以在一切刷新时处理几秒钟的延迟。但是现在,控制台首先被记录,然后所有的更改在几秒钟后立即发生。因此,隐藏与更新一起发生 如果有什么不同,update函数会创建并销毁几个div元素,然后开始创建JSXGraphs并更新这些图上的函数、点等Javascript 代码不';你跑得不整齐吗?对DOM的更新是否同时发生?,javascript,jquery,jsxgraph,Javascript,Jquery,Jsxgraph,我在按顺序运行代码时遇到了一些问题。基本上,我有一个隐藏元素的函数,控制台记录一条消息,然后运行另一个函数,对DOM进行缓慢而大规模的更改 理想情况下,隐藏首先发出用户响应的信号,然后他们可以在一切刷新时处理几秒钟的延迟。但是现在,控制台首先被记录,然后所有的更改在几秒钟后立即发生。因此,隐藏与更新一起发生 如果有什么不同,update函数会创建并销毁几个div元素,然后开始创建JSXGraphs并更新这些图上的函数、点等 check_answer(answer_input) { if (t
check_answer(answer_input) {
if (this.ans == answer_input) {
$("#answer-card-section").hide();
console.log("CORRECT!");
current_question.update();
return true;
}
else {
return false;
}
}
谢谢 在JS中执行长时间运行的函数时,呈现UI的调用可能会被阻止。在某些情况下,它还可以防止前面的操作明显地更新DOM,这就是您在这里看到的 简单的解决方法是将
update()
调用放置在一个具有短延迟的超时内。这将允许hide()
首先更新DOM。试试这个:
function check_answer(answer_input) {
if (this.ans == answer_input) {
$("#answer-card-section").hide();
setTimeout(function() {
current_question.update();
}, 25);
return true;
}
else {
return false;
}
}
似乎您需要在所有
hide
-操作完成后执行回调函数。在jQuery中实现这一点的一种方法是使用$.when().done
:
function check_answer(answer_input) {
if (this.ans == answer_input) {
$.when( $("#answer-card-section").hide() ).done(function() {
current_question.update();
});
return true;
} else {
return false;
}
}
但是请注意,一般来说,此函数的返回将在
当前的\u question.update()
完成之前进行。谢谢,这很有效,但我想知道这是否是一种好的做法。是否有强制更新DOM的函数?没有。这不是一个很好的实践,坦率地说,有点代码味道。我建议重构update()
函数,使其不是一个密集的过程。你是如何做到这一点的,我们无法真正帮助你,虽然现在必须这样做,但我只有一个页面有这么多的信息,所以这不是太糟糕。但在使用它的同时,我找到了一些方法来优化我的更大的函数,所以希望我可以完全避免它。它只是。。。有点困扰我。这不会改变任何事情,因为hide()
不是异步调用。