ドロップ・アドバイス&ドロップ・スペックには深刻な欠陥があり、扱いにくいです。
子要素を追跡することで、(子要素が干渉しない)期待される動作を達成することができます。
jQuery.fn.dndhover = function(options) {
return this.each(function() {
var self = jQuery(this);
var collection = jQuery();
self.on('dragenter', function(event) {
if (collection.size() === 0) {
self.trigger('dndHoverStart');
}
collection = collection.add(event.target);
});
self.on('dragleave', function(event) {
collection = collection.not(event.target);
if (collection.size() === 0) {
self.trigger('dndHoverEnd');
}
});
});
};
jQuery('#my-dropzone').dndhover().on({
'dndHoverStart': function(event) {
jQuery('#my-dropzone').addClass('dnd-hover');
event.stopPropagation();
event.preventDefault();
return false;
},
'dndHoverEnd': function(event) {
jQuery('#my-dropzone').removeClass('dnd-hover');
event.stopPropagation();
event.preventDefault();
return false;
}
});
クレジット:以下
は(jQueryを使って)これを行う方法の簡単な例である
'dragleave' of parent element fires when dragging over children elements
またはにイベントを添付するとどうなりますか? – derekcohen
この場合は期待通りに動作しますが、イベントをコンテナ全体にアタッチできる必要があります。私はこれがうまくいかない理由は見当たりません。 –
ここでこの問題の回避策を見てください:http://stackoverflow.com/a/15216514/865467 –