我在页面上有一些div有溢出:auto,很多都比可见区域更适合。当我从一个div拖放到另一个div时,如果目标div上方的div有一个长列表,$(this)将返回该div的id而不是我的item登陆的div。在视觉上和在修改后的HTML中,它工作得很好,但我需要能够获得它降落的div的id,似乎无法弄明白。似乎必须有一个解决方法???
我的目标是可靠地获取接收div的id。在drop事件触发时,该位置没有改变。也许它可以按照相反的顺序用id初始化每个droppable div,而不是使用类'sortable',但是可能有10或15个,它看起来非常笨拙。
这是我的初始化代码(在尝试贪婪之后:真实):
$( ".sortable" ).sortable({
connectWith : ['.sortable'],
dropOnEmpty : true,
placeholder : "ui-state-highlight",
revert: true,
start : function(event, ui) {
getEquip($(ui.item).attr('id').slice(8));
}
});
$( ".sortable" ).draggable({
helper: "clone",
revert: "invalid"
});
$( ".sortable" ).droppable({
greedy : true,
drop: function( event, ui ) {
var msg = 'Moved ' + $(ui.draggable).text() + ', id#' + $(ui.draggable).attr('id').slice(8) + ' to';
msg += ' ' + $(this).attr('id'); //<<== gives wrong id if list above is long
msg += ' ' + $('#' + $(ui.draggable).attr('id')).parent().attr('id');
writeFooter(msg);//Moved hydrant wrenches, id#164 to sortable16 sortable22
},
});
答案 0 :(得分:0)
找到了解决方法。如果我通过id从底部向上初始化droppable div,即以相反的顺序,问题就消失了。以前我是按班级初始化它们。修改后的代码片段如下所示,其中subloc [i-1] [0]是子位置ID#:
for (var i = subloc.length; i > 0; i--) { //init droppables backwards to overcome overflow bug
$( "#sortable" + subloc[i-1][0]).droppable({
tolerance : 'intersect',
drop: function( event, ui ) {...