我有一個APEX應用程序,它帶有一個調用javascript函數的按鈕。該功能正在做一些屏幕抓取並需要幾秒鐘才能完成。我想首先顯示一個微調圖標,以提供正在發生的事情。但是,即使我在調用函數之前使用jquery .show()函數顯示了微調框,但它們似乎都在同一時間執行......點擊按鈕後的幾秒鐘。就好像jquery .show()在函數調用完成之前不會執行。在調用函數之前,如何讓.show()執行?我甚至嘗試將.show()添加到函數的第一行,但結果是相同的。只有在功能完成後,微調器纔會顯示。jQuery展示不會在預期時執行
回答
顯示接受一個回調函數作爲參數。見下面的例子。
function buttonHandler() {
$(".spinner").show(function() {
// this will be executed after show has completed
});
}
'show'不是一個動畫函數,除非你傳遞一個持續時間或回調,當然。 :-)但是,這是有效的。 – 2015-03-13 13:52:00
確實,我從答案中刪除不清楚的措辭 – skajfes 2015-03-13 13:55:47
我忘記了show接受回調函數。感謝您的提示,完美的工作! – 2015-03-13 14:33:16
如何在調用函數前執行.show()?
你叫.show
,然後產生回瀏覽器的時間一點點,之前調用該函數,就像這樣:
function buttonHandler() {
$("...").show();
setTimeout(theFunction, 0);
}
你必須與你的目標瀏覽器,以確定實驗是否需要大於0
的值。該值以毫秒爲單位,因此高達50個左右的任何內容對於人類來說都基本上是不可感知的。
通過在返回瀏覽器之前不調用該函數,您可以讓瀏覽器更新顯示。
請注意,微調器可能不是動畫,而功能捆綁的東西,它取決於瀏覽器。您可能更願意展示靜態但動態的外觀(「加快條紋」的方式)以避免瀏覽器之間的不一致。使用50ms的
活生生的例子:
$("#the-button").on("click", buttonHandler);
function buttonHandler() {
$("#spinner").show();
$("#done").hide();
setTimeout(theFunction, 50);
}
function theFunction() {
var target = Date.now() + 1000;
while (Date.now() < target) {
// Do nothing, we're just simulating a busy function
}
$("#spinner").hide();
$("#done").show();
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input type="button" id="the-button" value="Click me">
<div id="spinner" style="display:none">We're doing it, one sec!</div>
<div id="done" style="display:none">Function is done now</div>
我一直認爲這是由於某些原因特定於Chrome的。 – Andy 2015-03-13 13:44:48
@Andy:'0'也適用於最近的IE瀏覽器。 Firefox需要更長時間,'50'適用於上述(在我的系統上)。 – 2015-03-13 13:46:47
- 1. jQuery不按預期執行功能
- 2. AsyncTask在預執行時不顯示
- 3. Jquery腳本沒有按預期執行
- 4. Thread.sleep()在預期時不會觸發
- 5. 程序不會在預期時退出
- 6. 以下代碼不能按預期執行。列表不顯示
- 7. JQuery - 預期不會提交表單
- 8. 服務不會按預期重複執行
- 9. 更新聲明將不會按預期執行
- 10. PowerShell的功能不執行如預期
- 11. 嵌套查詢不執行如預期
- 12. 執行計劃與預期不符
- 13. 線程輸出不按預期執行
- 14. PIVOT未按預期執行
- 15. AsyncTask未按預期執行
- 16. jQuery選項卡不按預期顯示
- 17. Chrome擴展程序將不會執行
- 18. 導航jQuery插件將不會按預期的那樣行動
- 19. $(window).scrollTop在預期之前執行嗎?
- 20. pthread在預期之後執行
- 21. jQuery滑塊行爲不如預期
- 22. JQuery超時不執行
- 23. JQuery ready函數在視圖內呈現時不會執行
- 24. 在jQuery中執行.replaceWith()時,事件綁定不會被保留
- 25. jQuery:$ .ajax在另一個頁面加載時不會執行
- 26. Xcode 5:在項目清理期間執行預執行腳本
- 27. Primefaces selectOneMenu不會在更改時執行
- 28. TestNG並行執行行爲與預期行爲不匹配
- 29. Jquery Ajax:只有Page_Load方法正在執行,而不是預期的方法
- 30. 運行python mox test時永遠不會調用預期方法
你故意typo'd您的標題得到迴避的事實,與確切名稱問題已經存在。 **不要那樣做**。拿出一個實際描述你的問題的名字。 – meagar 2015-03-13 13:41:21
你可以顯示你已經重現這個問題的代碼嗎 – Quince 2015-03-13 13:41:27
你可以在使用'setTimeout'調用函數之前使圖標出現,但是在函數運行時它不會被動畫。 – Guffa 2015-03-13 13:45:45