2008-11-25 52 views
0

我正在使用script.aculo.us可排序對象的項目。Script.aculo.us在IE中排序onUpdate問題

它在Firefox和Chrome中運行的很好,而且速度很快,但是在IE中,每當我刪除一個元素時,速度都非常慢。

我已經做了一些檢查,事實證明,在IE中,「onUpdate」回調函數在每次放下時調用大約8次。通常情況下,每個可排序的容器(目的地和原點)應該只被調用一次。

由於我的回調函數調整了某些元素的大小並在這些元素中繪製了圖形,因此每次調用所涉及的計算都相當可觀。

有沒有人知道什麼可能導致這個問題在IE中,或如何解決它?

編輯: 我注意到,問題不是它拖動時會觸發許多次,問題是onUpdate函數在排序次序發生變化時被觸發,即使拖動沒有結束了。看來,onUpdate實際上像onChange回調,但只有IE。

回答

1

我想你如何使用計時器是錯誤的。你只想讓定時器在超時後觸發一次。如果在超時過程中仍然有事情發生,您需要重新設置計時器並重新開始計時,否則您只是延遲了您在第一時間所做的同樣事情。

var timer1 
Sortable.create("fList", {constraint:false,onChange:function(){triggerUpdate()}}) 

function triggerUpdate() { 
    clearTimeout(timer1) 
    window.setTimeout(function(){showList()},800) 
} 
function showList() { 
    var now = new Date() 
    alert(now) 

} 
1

我不知道script.aculo.us,但在調整事件大小時,IE不斷地觸發事件,不只是在調整大小後(像大多數其他瀏覽器一樣),因此我猜測onUpdate是基於別的東西多次發射(如調整大小)。

我用於類似問題的一個技巧是事件觸發時,設置「動作」發生在超時後(例如1/4秒)......但每個新事件觸發「清除」超時。 ..所以你得到的是「最後」事件。

如果有人知道script.aculo.us實際上觸發了什麼,我可能會提供更多明確的細節。

+0

感謝您的信息!我會看看。 – 2008-11-26 00:32:34

+0

嘗試了此解決方案,但似乎所做的只是使每個請求都等待,因此速度更慢。 – 2008-11-26 00:48:23