Das Problem, das ich habe, ist, dass das dragleave
Ereignis eines Elements ausgelöst wird, wenn ein untergeordnetes Element dieses Elements bewegt wird. Wird auch dragenter
nicht ausgelöst, wenn Sie das übergeordnete Element erneut zurückfahren.
Ich habe eine vereinfachte Geige gemacht: http://jsfiddle.net/pimvdb/HU6Mk/1/ .
HTML:
<div id="drag" draggable="true">drag me</div>
<hr>
<div id="drop">
drop here
<p>child</p>
parent
</div>
mit folgendem JavaScript:
$('#drop').bind({
dragenter: function() {
$(this).addClass('red');
},
dragleave: function() {
$(this).removeClass('red');
}
});
$('#drag').bind({
dragstart: function(e) {
e.allowedEffect = "copy";
e.setData("text/plain", "test");
}
});
Was es tun soll, ist den Benutzer zu benachrichtigen, indem der Tropfen div
rot gezogen wird, wenn etwas dorthin gezogen wird. Dies funktioniert, aber wenn Sie in das p
Kind ziehen, wird das dragleave
gefeuert und das div
ist nicht mehr rot. Wenn Sie zum Tropfen zurückkehren, wird er div
auch nicht wieder rot. Es ist notwendig, sich vollständig aus dem Tropfen zu bewegen div
und ihn wieder hineinzuziehen, um ihn rot zu machen.
Ist es möglich zu verhindern, dass dragleave
beim Ziehen in ein untergeordnetes Element ausgelöst wird?
Update 2017: TL; DR, Suchen Sie nach CSS, pointer-events: none;
wie in der Antwort von @ HD unten beschrieben, die in modernen Browsern und IE11 funktioniert.
dragleave
es in diesem Fall immer noch ausgelöst wird.