2016-07-22 130 views
4

我有一個輸入類型字段的表單。我有幾個單選按鈕,根據我點擊的是哪一個,輸入類型字段中的值將被更新。之後,我將調用一個Javascript函數來執行某些操作,並且該函數將使用輸入字段中更新的數量(文本)。操作DOM時,Javascript是否同步?

當然,將這個數量傳遞給函數本身會更安全,但是我可以依靠Javascript首先更新DOM,顯示更新輸入字段值,然後通過document.getElementById("input-quantity").value檢索並使用它功能?或者,如果DOM的刷新需要時間,該函數是否可以獲得「舊」值?

+0

要獲取您的值更新字段,必須將腳本包含在內DOMContentLoaded監聽器事件..更好地保持您的值在會話屬性中。 –

+0

最好不要先通過JS將值放入DOM中,然後從DOM中讀取值。只是使用它,將它傳遞或存儲在某個地方。 – vsync

+4

@ABUdhay - 不,你沒有。 – nnnnnn

回答

5

正如你所說,只是將值傳遞給函數將是首選。

但是,設置輸入值是同步的;在您所描述的內容中,您將可靠地獲得更新的價值,跨瀏覽器。其他的DOM操作(插入元素,刪除它們,移動它們)也是同步的,儘管用戶在JavaScript代碼完成前可能看不到結果,讓瀏覽器使用該線程重新繪製顯示。 (儘管JavaScript本質上不是單線程的,但瀏覽器使用單個主UI線程來運行JavaScript代碼,並且通常也使用該線程來更新顯示。)

+0

你能給出你的結論嗎?以及如何解釋長時間運行的JavaScript代碼塊UI更新? – Chao

+1

@Charvis:參見[ECMAScript規範的作業和作業隊列部分](http://www.ecma-international.org/ecma-262/7.0/index.html#sec-jobs-and-job-queues)和HTML規範的各個部分,特別是[這裏](https://www.w3.org/TR/html5/introduction.html#serializability-of-script-execution)和[here](https:// www。 w3.org/TR/html5/introduction.html#common-pitfalls-to-avoid-when-using-the-scripting-apis)。如果您對長時間運行的腳本有特殊疑問,請發表問題! :-)(你必須在問題中定義「長時間運行的腳本」的含義。) –