Javascript Internet Explorer 9拖动事件块事件队列

Javascript Internet Explorer 9拖动事件块事件队列,javascript,html,internet-explorer,drag-and-drop,Javascript,Html,Internet Explorer,Drag And Drop,我正在做一个项目,在那里有一个拖放可重新排序的列表会很酷。使用HTML5拖放,我可以轻松完成这项工作。我的问题是列表可能很长,因此它实际上是分页的或“滚动加载”或任何你想称之为它的东西。这只是通过响应scroll事件并通过AJAX加载更多数据来实现的 因此列表有一个“凹凸滚动”功能,我通过在视口的顶部和底部有两个通常不可见的div来实现。当他们收到dragover事件时,他们只是增加或减少视口的滚动顶部。很简单。在小提琴中,我给了他们一个背景,这样你就可以看到他们。如果您尝试在FF或Chrome

我正在做一个项目,在那里有一个拖放可重新排序的列表会很酷。使用HTML5拖放,我可以轻松完成这项工作。我的问题是列表可能很长,因此它实际上是分页的或“滚动加载”或任何你想称之为它的东西。这只是通过响应scroll事件并通过AJAX加载更多数据来实现的

因此列表有一个“凹凸滚动”功能,我通过在视口的顶部和底部有两个通常不可见的div来实现。当他们收到dragover事件时,他们只是增加或减少视口的滚动顶部。很简单。在小提琴中,我给了他们一个背景,这样你就可以看到他们。如果您尝试在FF或Chrome中使用小提琴,您可以看到ajax调用完成了UI更新。这不会发生在IE上

dojo.byId("bumpScrollDown").connect("dragover", function(bump) {
    wrapper.scrollTop -=  20;
    dojo.xhrGet({url: "/echo/json/"}).then(function() {
        // THIS WILL NEVER FIRE on IE 9 UNTIL THE DRAG
        // OPERATION IS COMPLETED
        dojo.byId("log").innerHTML += "callback... ";
    }); 
});
问题是IE9上的拖拽似乎会阻塞事件循环,所以什么都不会发生——只要拖拽还在继续,ajax回调、超时等就不会触发。这似乎会破坏很多东西,包括从dragover开始的动画等等

有人知道我怎样才能让它工作吗?我可以取消拖动事件并重新开始吗?调用dragDrop()将再次启动拖动,如果我能够以某种方式取消它以允许ajax回调启动的话

您可以在fiddle上看到,在拖动结束之前,由拖动事件触发的AJAX调用都不会被调用。这不会发生在chrome或FF上


更新:它在IE10上运行得更好,我没有IE9可以测试,但是

这里我可能完全错了,但是,您是否测试过它是否与代码中的stopEvent位相关:

dojo.connect(wrapper, "dragover", function(ev) {
    if (!dojo.hasClass(ev.target, "noDroppy")) {
        dojo.addClass(ev.target, "dragover");
        //dojo.stopEvent(ev);
    }
});
否则:

我最近在jQuery中编写了类似的代码

我的解决方案是在拖动事件本身内部检查拖动是否悬停在凹凸上,而不是在凹凸上的单独悬停事件

您甚至可以检查拖动在颠簸上的距离,以调整滚动速度


希望这能有所帮助。

因此,您可以取消拖动事件,它似乎结束了解除阻止的拖动,事件开始触发。但是如果有人有任何其他想法想得到你的回复,我将不胜感激——但是dragover上的stopEvent是你告诉HTML5 dnd API你允许删除的方式,所以如果我删除它,我也不能接受任何删除事件——反正也没什么区别。您在哪里附加了上面提到的拖动事件?在jQuery中,我可以使用dragstart初始化拖动对象,拖动和拖动。是否可以将NodeRoppy类添加到Bump中,并在代码中扩展dragover事件以进行滚动,还是只触发一次?Bump有自己的NodeRoppy等价物-它们不会取消事件并侦听dragover。“nodropy”只是尝试在列表中列出一件不能接受丢弃的东西。ondragover会在拖动时不断激发…为了清晰起见-我相信无论您在何处放置setTimeout或某个AJAX调用都无关紧要-关键是,如果您在dragover事件中进行了调用,则无论经过多长时间,在IE9上完成拖动之前都不会激发