如果在拖动操作期间显示hoverClass,则Droppable项不显示hoverClass

时间:2013-02-27 21:43:56

标签: jquery jquery-ui drag-and-drop jquery-ui-draggable jquery-ui-droppable

我知道标题令人困惑,但问题很容易复制。

我的页面上有一些可以放置的元素(jQueryUI),而hoverClass显示它们被拖动的时间。但是,我有一些隐藏的元素,有时会在拖动过程中显示,然后不会像他们应该那样响应他们的hoverClass。

我有一个jsFiddle here来显示这种情况,但是,如果你继续拖动div最终listItems开始显示他们的hoverClass。但是,在我的网站上,这种情况永远不会发生...... hoverClass永远不会出现在新显示的项目上。

HTML

<ul>
    <li>Row1</li>
    <li>Row2</li>
    <li>Row3<span id="More">MORE...</span></li>
    <li style="display: none;">Row4</li>
    <li style="display: none;">Row5</li>
</ul>
<div id="DragMe">DragMe!</div>

CSS

#DragMe {
    position: absolute;
    height: 100px;
    width: 100px;
    border: 1px solid black;
    background-color: RGBA(255,255,255,0.5);
}
.DragOver {
    background-color: #000000;
    color: #FFFFFF;
}
#More {
    margin-left: 10px;
}

的JavaScript

$('#DragMe').draggable({
    cursorAt: {top: 50, left: 50}
});

$('li').droppable({
    hoverClass: 'DragOver'
});

$('#More').droppable({
    over: function() {
        $('li').show();
    }
});

我可以改变一些方法来使其正常工作吗?

1 个答案:

答案 0 :(得分:14)

我猜jQuery UI有一个使用隐藏元素的bug,它们是droppables。解决方法可能是使用不透明度:

HTML

...
<li class="hidden">Row4</li>
<li class="hidden">Row5</li>
...

CSS

.hidden{
    opacity: 0;
}

JS

$('#More').droppable({
    over: function() {
        $('li.hidden').removeClass('hidden');
    }
});

DEMO:http://jsfiddle.net/CsXpL/2/

修改

你欠我一杯冰镇啤酒! Draggable有以下选项:refreshPositionsType说:

If set to true, all droppable positions are calculated on every mousemove. Caution: This solves issues on highly dynamic pages, but dramatically decreases performance.

链接:http://api.jqueryui.com/draggable/#option-refreshPositions

所以解决方案是:

$('#DragMe').draggable({
    cursorAt: {top: 50, left: 50},
    refreshPositions: true
});

DEMO:http://jsfiddle.net/CsXpL/9/