Script.aculo.us可在IE中排序onUpdate问题

时间:2008-11-25 22:42:35

标签: javascript ajax prototypejs scriptaculous

我正在开发一个项目,我正在使用script.aculo.us可排序对象。

它在Firefox和Chrome中运行良好且快速,但在IE中,每当我删除元素时它都非常慢。

我做了一些检查,结果发现在IE中,每次丢弃时,“onUpdate”回调函数被调用大约8次。通常情况下,每个可排序的容器(目的地和原点)只能被调用一次。

由于我的回调函数调整了一些元素的大小并在这些元素中绘制图形,因此每次调用所涉及的计算都相当可观。

有谁知道IE中可能导致此问题的原因,或者如何修复它?

编辑: 我注意到问题并不在于它被拖动时多次触发,问题是当可排序的顺序发生变化时onUpdate函数被触发,即使拖动还没有结束。似乎onUpdate实际上像onChange回调一样工作,但只有IE。

2 个答案:

答案 0 :(得分:1)

我不知道script.aculo.us但是在调整事件大小时,IE不断激发事件,而不仅仅是在调整大小之后(就像大多数其他浏览器那样),因此我猜测onUpdate是基于某些东西内部触发的其他是多次开火(如调整大小)。

我用于类似问题的一个技巧是,当事件触发时,将“动作”设置为在超时后发生(例如1/4秒)......但是每个新事件触发“清除”超时。所以你得到的就是“最后”的事件。

如果有人知道script.aculo.us实际触发了什么,我可能会提供更明确的细节。

答案 1 :(得分: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)

}