我面對下面的代碼在Ajax請求的成功塊:jQuery.remove()是否真的同步?
$('#something').remove();
alert('something was removed');
執行時我預期完成刪除「東西」,之後彈出一個警告,但由於某種原因警報彈出並且只有在確認元素被移除之後。
這是爲什麼發生?這是微不足道的代碼,我想避免回調等。我應該檢查什麼?
它在FF上進行了測試。感謝您的提示。
我面對下面的代碼在Ajax請求的成功塊:jQuery.remove()是否真的同步?
$('#something').remove();
alert('something was removed');
執行時我預期完成刪除「東西」,之後彈出一個警告,但由於某種原因警報彈出並且只有在確認元素被移除之後。
這是爲什麼發生?這是微不足道的代碼,我想避免回調等。我應該檢查什麼?
它在FF上進行了測試。感謝您的提示。
就像Ivan Minakov said in his answer一樣,爲了看到在警報之前重新繪製的頁面,您必須讓JavaScript代碼完整。發生這種情況後,您可以安排繼續 - 顯示警報。
通常,這不會發生在JavaScript中 - 像alert和prompt這樣的函數是例外的,因爲它們在用戶行爲之前實際上阻塞了該線程。
這意味着你可以達到你想要的東西:
$('#something').remove();
setTimeout(() => {
alert('something was removed');
});
或異步/等待,如果這是你的事:
// in an async function
$('#something').remove();
await delay(0);
alert('something was removed');
// ...somewhere...
function delay(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
DOM是同步更新的,也許在頁面之前沒有呈現警報? – Kos
其offcourse同步 –
嘗試使用'console.log'而不是'alert'? – evolutionxbox