jQuery UI 可排序:无法将第一个元素添加到链接元素
jQuery UI Sortable: Cannot add first element to linked element
我有两个元素列表,我已经在这两个元素上启用了jQuery UI可排序。 我使用了connectWith
选项,使我能够在两个列表之间拖动。
一个列表中有很多元素,所以我在其中添加了overflow-y: scroll
。 我使用自定义helper
函数允许我在拖动元素时滚动整个页面。
helper: function(event, element){
// From: http://stackoverflow.com/a/8512783/206403
return element.clone().appendTo('body');
}
如果顶部列表中没有元素,则很难将元素拖入其中。 如果顶部列表中已经有一个元素,它工作正常。
下面是一个演示:http://jsfiddle.net/MCcuc/5/。 向下滚动,并尝试将"Item Q"(从红色列表底部(移动到绿色列表(尝试将元素移动到绿色列表上,然后再次移出(。 您会发现将其附加到绿色列表并不容易。
我认为这与我的helper
功能有关。 如何让它让我将第一个元素拖到绿色列表中?
我不确定它是否有帮助,但我发现"真正的"问题开始得更早,而不是在占位符消失的时候。发生的情况是内部滚动条不滚动,但在后台,光标的位置仍会触发在"非活动"列表中的重新排序。因此,从视觉上看,您的项目位于"活动"列表的上方,但其位置仍位于"非活动"列表的前 2 个元素上方。但是,由于视觉上的"过度"放置,占位符已在"活动"列表中。因此,当位置离开非活动列表第一项的"虚拟位置"时,占位符将被删除。不幸的是,此时它位于活动列表中,而不是在非活动列表中。
所以我所说的"问题开始得更早"的意思是占位符应该留在非活动列表中并使其向上滚动,而不是过早移动到活动列表,这可能是你想要的:首先使用列表的滚动条,然后使用正文的滚动条。但这意味着移动帮助程序项在它上方时需要成为旧列表的子元素,当它离开旧列表的区域时成为"body"的子元素。
我认为你不能这样做(用这个插件(。
可能的情况:如果您不想在"非活动"列表中重新排列,而只想通过页面滚动将项目移动到"活动"列表。在这种情况下,您可以做的是使用"out"事件,当它被触发时,向上滚动"非活动"列表。不幸的是,"out"事件似乎没有在应该第一次触发时触发。似乎是一个错误:(
...
appendTo: 'body',
helper: 'clone',
out: function() {$('#Inactive')[0].scrollTop = 0;},
...
更新:找到了解决方法。我不是在润色它(特殊情况:当占位符是列表中的第一项时(,但这是这个想法:
appendTo: 'body',
helper: 'clone',
placeholder: 'addBox',
change: function() {
$('.addBox').prev()[0].scrollIntoView();
}
坦率地说,我建议从根本上更改您的 UI 以消除对滚动条的需求。
可排序插件存在许多与滚动条相关的未解决问题(有关一些示例,请参阅 #3173、#5881、#7033、#7065、#7351、#7546、#7581、#7784 和 #8039(。 开发团队目前没有优先考虑这些,因为该插件设置为在 2.0 中重写(这还有很长的路要走(。
即使您能够解决当前遇到的问题(我确实尝试过......(,我有一种感觉,当您进行更彻底的跨浏览器测试时,您会感到非常悲伤。 就我个人而言,我也觉得从可用性的角度来看,使用滚动条的可排序元素很奇怪。
祝你好运。
如何将列表并排放置,这样可以消除问题。http://jsfiddle.net/MCcuc/18/
<table>
<tr>
<td><div id="Active" class="sort">
</div>
</td>
<td>
<div id="Inactive" class="sort">
<div class="box">
<div class="handle"></div>
<span>Item B</span>
</div>
</div>
</td>
</tr>
</table>
当底部列表向下滚动时,溢出不可见,但仍会影响顶部列表所在的空间。下面的列表是不可见的,当尝试删除 Q 项目时,由于溢出,它仍然被放在下面的列表中。
试试这个:http://jsfiddle.net/KaBB7/
主要思想是 - 你不需要将可排序列表与自身连接,所以只需单独初始化你的列表并相互连接。
- Lodash:返回对象的第一个键,该对象的值(即数组)中有一个给定的元素(即字符串)
- Javascript:表单验证getElementById仅返回第一个id元素
- 使用jquery选择元素附近的第一个h2
- 在jQuery中,如何测试一个元素是否是同一类的多个元素中的第一个
- 只获取HTML元素的第一个类
- 如果第二个 html 元素位于第一个 html 元素上方,如何移动该元素
- 使用 querySelectorAll 获取具有该类名的所有元素,而不仅仅是第一个
- 在 javascript 中创建第二个 html 元素会删除第一个
- 如何停止在第一次按下回车键时触发第一个 onclick 事件的元素
- 获取列表中的第一个 DOM 元素
- 第一个jQuery插件-如何以正确的方式保存关联元素数据
- 如何使用Jquery选择第一个td元素及其文本
- 如何获取在视口中可见的第一个DOM元素
- 不要使用jquery选择第一个li元素
- 获取href不仅是第一个,而且是所有匹配的元素
- 如何编写一个选择器来查找第一个“输入”.在类为“x”的元素之后
- 向元素添加另一个类,但作为第一个类
- jQuery + CSS:如何检测第一个“移出”将光标移出元素
- 我如何从最接近的'tr'的第n个元素获得一个值
- Jquery删除所有的第一个span元素