2011-08-26 37 views
0

我有幾個鏈接排序頁面上的當前元素。Javascript排序與回調

功能:

  • A - 根據排序後的數組顯示元件 - 按處理程序與數組排序
  • 乙。

排序可能需要2秒鐘,所以我想顯示一些反饋給用戶。

我曾想過將鏈接文本更改爲「進行中」或其他類似的內容。

In fun一個商店舊的鏈接文本,並將其更改爲'正在進行'並將另一個功能傳遞給B ,我在顯示元素之後調用以顯示鏈接的舊文本,但它不起作用。

在調試器鏈接文本被改變,但我只能看到只有舊文本。

如何爲此創建有效的回調?

我看到類似排序的網站,也沒有任何反饋給用戶。

這是可能做到與JavaScript?或反饋只能顯示在Ajax請求上?

+1

mhm ...如果您在開始排序之前更改鏈接文本恕我直言,這應該工作。你可以發佈一些代碼片段嗎? – Chris

回答

3

該問題很可能是您完全運行同步代碼。

在您開始的任何函數完成之前(即使您在長時間運行計算之前更新DOM),DOM不會更新。

Here's an example長時間運行的計算會阻止DOM立即更新。 (點擊「渲染」按鈕,在頂部看到正確的例子。)

注意在本例中,該"Starting... Wait a few seconds."文本立即出現,並不會被阻止由長時間運行計算。但"Updated"文本需要3秒才能顯示。

原因是因爲我先將"Starting..."添加到DOM,然後將其餘代碼包裝在setTimeout中。這允許DOM立即更新"Starting...",但其餘代碼setTimeout同步,所以DOM將不會再次更新,直到該代碼完成。


所以您的解決方案可以與"In progress..."更新文本,那麼爲了讓DOM與你的進度消息立即更新包的代碼的其餘部分在setTimeout()

element.innerHTML = "In progress..."; 

setTimeout(function() { 
    // invoke the sorting code 
}, 0);