Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript是否等待此DOM事件完成?_Javascript_Dom - Fatal编程技术网

JavaScript是否等待此DOM事件完成?

JavaScript是否等待此DOM事件完成?,javascript,dom,Javascript,Dom,假设我在第1行修改了HTMLDOM。我可以确定JavaScript的第2行将使用由第1行执行的DOM修改吗 这是唯一的解释,我可以想出一些错误的行为,我一直在一个表格。前一行应该更新DOM,但有时DOM不在下一行时不会更新。不过,当我放慢速度时,一切似乎都很顺利。是的,Javascript DOM修改将按顺序进行,除非您等待异步AJAX调用返回。在第一条指令完成之前,不会出现下一条指令。但是,请显示您的代码 立即更新DOM元素上的特定属性,并应在后续读取该属性时持续更新 如果您依赖该更改在DOM

假设我在第1行修改了HTMLDOM。我可以确定JavaScript的第2行将使用由第1行执行的DOM修改吗


这是唯一的解释,我可以想出一些错误的行为,我一直在一个表格。前一行应该更新DOM,但有时DOM不在下一行时不会更新。不过,当我放慢速度时,一切似乎都很顺利。

是的,Javascript DOM修改将按顺序进行,除非您等待异步AJAX调用返回。在第一条指令完成之前,不会出现下一条指令。但是,请显示您的代码

立即更新DOM元素上的特定属性,并应在后续读取该属性时持续更新

如果您依赖该更改在DOM中传播,那么这可能会很棘手。例如,更改元素的大小并期望同级元素报告一个新的偏移位置,后者可能在堆栈展开之前不会发生。我不知道确切的规则,但你必须小心——有时这是依赖于浏览器的行为。但令人害怕的是,有时会抛出一个警报来帮助调试,这会使元素立即“意识到”它们的新布局。然后你把警报拿出来,它又回到童车行为


因此,如果您确信DOM更改没有立即产生影响,那么有时需要做的事情是使用回调函数和时间值0调用“setTimeout”。计时器回调完成后,您可以完成后续处理。YMMV

发布一些代码进行分析,很难说什么都看不见。事实上,浏览器中存在一些“问题”,事件循环被提升到一个意外的位置,这会使应该被视为原子操作的操作变得不原子。FireFox在XHR和
alert
(更新的FF)方面存在此“问题”。虽然DOM和most元素属性应立即更新,但浏览器可能无法在脚本执行期间完全更新布局,因此在执行下一行代码之前,可能无法更新相关属性(宽度、高度等)。为了提高浏览器的性能,最好等到所有DOM修改完成后再进行可能代价高昂的工作,如重新流动页面。如果是这种情况,那么问题一定是其他原因。我将研究它,如果我仍然不能得到它,将代码作为一个不同的问题发布。