Jquery UI可排序 – 在启动事件触发之前执行操作

我已经搜索了STACKOVERFLOW和其他论坛来解决我的问题 – 如果我错过了一个有效的解决方案,请指出我。

我的问题:每当在可排序列表中拖动一个元素(一个portlet div)时,我需要在实际拖动过程开始之前执行一些操作(从我在START事件被触发之前理解)。

更具体一点:我的DIV为用户提供了扩展/折叠它的主体的可能性(如示例中的jquery UI页面http://jqueryui.com/demos/sortable/#portlets )。

每当拖动一个元素时,我都想触发我的折叠方法,以便拖动的唯一可视元素是折叠的DIV。

无论什么时候我打电话给我的方法(像这样)

$someitem.trigger("toggle.somenamespace") 

它按预期工作,除了在sortable中触发start事件之前计算拖动帮助器的高度,因此辅助器具有处于未折叠状态的原始元素的高度。

我原来的想法是:由于可排序的例如在实际拖动过程开始之前测量拖动距离的可能性(使用选项: 距离 ),它应该可以挂钩到此流程中,例如存储原始startDrag函数(或在临时var中对可排序窗口小部件进行任何调用,使用自定义回调覆盖它,首先触发我的折叠function,然后调用原始函数以确保正确计算高度。 然而 – 到目前为止,我对这种方法没有太大的成功……

请注意,在处理程序中为拖动或在可排序事件上设置CSS属性没有达到预期效果,因为为帮助程序计算的可排序窗口小部件的高度设置为元素属性。

或者 – 可能有人知道更好的方法来影响在拖动过程中显示的助手的高度,这只是我的观点,我的原始方法(在拖动过程之前更改元素,然后让小部件按照计算方式进行计算)它是有意的)将是一个更好的解决方案……

感谢任何帮助,马蒂亚斯

编辑:将可排序标志:forceHelperSize设置为true并在开始拖动器中设置ui.item /帮助器大小也不起作用,因为它可视化产生所需的效果(仅拖动折叠的项目,但停止元素一直拖下来(好像该项目仍然具有未折叠状态的高度)用帮助器测试:’原始’和’克隆’

我已经搜索了很长时间来寻找这个“解决方案”:

 $('.handle').each(function() { $(this).mousedown(function() { $(this).parent().parent().children('ol').hide('blind', 500); }); }); 

您可以通过隐藏手柄来触发事件并隐藏您想要的任何内容。 然后在我的示例501中将sortable的选项延迟设置为大于隐藏动画持续时间的值。

这不是一个优雅的解决方案,但它的工作原理 – 至少在我的程序中。

您可以这样做,但对于即将推出的jQuery UI版本来说,它不是未来的证据:

 var oldMouseStart = $.ui.sortable.prototype._mouseStart; $.ui.sortable.prototype._mouseStart = function(event, overrideHandle, noActivation) { this._trigger("CustomBeforeStart", event, this._uiHash()); oldMouseStart.apply(this, [event, overrideHandle, noActivation]); }; You can then use the new event when setting up the sortable: $(".whatever").sortable({ "CustomBeforeStart":function(e, ui) { } ... });