The solution is to bind to the scroll event on the elements of your initialization and any of these elements. Then, when any of the children invokes a scroll command, find all the draggable parents of this element and set the scrolling data element in this element.
In the current version of jQuery UI (1.8.16), the initial event always fires when you click the mouse on the scroll bar and updates the tree, so this solution works very well when testing.
$(".draggable").draggable({ start: function() { // if we're scrolling, don't start and cancel drag if ($(this).data("scrolled")) { $(this).data("scrolled", false).trigger("mouseup"); return false; } } }).find("*").andSelf().scroll(function() { // bind to the scroll event on current elements, and all children. // we have to bind to all of them, because scroll doesn't propagate. //set a scrolled data variable for any parents that are draggable, so they don't drag on scroll. $(this).parents(".ui-draggable").data("scrolled", true); });
For your viewing pleasure, I have included jsfiddle problems.
Prioritymark
source share