jQuery droppable $(this)返回带有overflow:auto的错误ID

时间:2011-03-26 22:21:57

标签: jquery overflow droppable

我在页面上有一些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  
        },
    });

1 个答案:

答案 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 ) {...