-
鉴于JavaScript正在同步运行(无
setTimeout
)以添加或删除HTML元素,HTML更改是否应该在完全完成之前显示给用户? -
更重要的是,如果JavaScript正在更改可以包含在表单提交中的元素(例如,添加多个
textarea
元素),用户可以在进行进步时单击提交按钮并提交不完整的请求吗?(请求中包含一些textarea
元素,而某些textarea
元素则不包括。)
这样的东西: <form action="" method="post"><input type="submit" value="Submit"></form>
用户提交时,某些功能恰好正在进行中。
function happens_to_be_running_and_user_clicks_submit(){
the_form_element.insertBefore(document.createElement('textarea'),the_form_element.firstChild).value='first textarea value';
the_form_element.insertBefore(document.createElement('textarea'),the_form_element.firstChild).value='second textarea value';
}
(似乎有很多关于反流损害性能的讨论。但是我仍然不确定是否存在任何要求,或者也许仅取决于浏览器。尤其是关于提交表单,无论它是否有任何东西使用反流或渲染。)
我认为您的混乱可以通过如何命名示例函数happens_to_be_running_and_user_clicks_submit
来解释。我认为您希望当用户单击按钮时,功能可以运行。
这是不可能的。至少不是不使用网络工人。即使到那时,网络工作者也无法更改DOM,因此,当Web Worker将消息发送回主线程以更改DOM时,它将再次变得不可能。
JavaScript是单线线。因此,一次只能发生一件事。当用户执行任何操作时(移动窗口,单击按钮,移动鼠标。)操作系统将将该事件发送到应用程序的事件队列。JavaScript(或更确切地说,浏览器)读取此队列以处理事件。但是由于它是单线线程,它仅在不忙时处理事件。
所以。这只给我们留下了两种可能性。
-
您的功能在用户单击按钮之前立即执行。然后,当用户单击按钮时,功能所做的一切都将呈现和活动。
-
用户单击按钮后,您的功能立即执行。然后,当用户单击按钮时,功能都不会活动。
没有3'rd状态。这是全部或一无所有。至少不是没有诸如 setTimeout
或ajax的异步。