新しい答え
ドロップ イベントは DOM のボックス要素の順序で発生するため、これに変更します。DOM の最初のものは、2 番目のものの下に表示されます。したがって、最後のドロップ イベントが実際には一番上にあります。
非常に短いタイムアウトを設定すると、すべてのドロップ イベントの後にイベント キューに置かれます。ドロップ イベントごとにタイムアウトが上書きされることは問題ではありません。最後のドロップ イベントは要素を変数に格納し、タイムアウトは、関心のあるドロップを認識する場所です。(「ui」変数も保存するかどうかはわかりません。)
var droppedBox;
function beigeDrop(e, ui) {
droppedBox = this;
var timeout = setTimeout(function() {
if (droppedBox) {
console.log("dropping into ", droppedBox);
}
droppedBox = null;
}, 1);
}
新しいフィドル
'z-layer' css 値をいじると、ボックスのオーバーラップ方法が変更されますが、DOM 内のボックスの順序は変更されず、ドロップ イベントの順序も変更されないことに注意してください。(そのケースを処理したい場合は、ドロップされたすべての要素のすべての「this」値を保存します。配列を使用します。次に、タイムアウトで配列をソートし、より高いzレイヤーを持つものを見つけて使用できます「ドロップオン」ボックスとして。)
元の回答 - 問題についてはコメントを参照してください
両方のベージュのボックスが、ドロップされた赤いボックスを受け入れることを伝えています。これにより、一方のボックスはそれを受け入れますが、もう一方のボックスは受け入れません。
$('#box1').droppable({drop:beigeDrop, accept:'#redbox'});
$('#box2').droppable({drop:beigeDrop, accept:'#none'});
最初のモディファイド フィドル