2008-11-25 59 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