Das Problem, das ich habe, ist, dass das dragleaveEreignis eines Elements ausgelöst wird, wenn ein untergeordnetes Element dieses Elements bewegt wird. Wird auch dragenternicht 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 divrot gezogen wird, wenn etwas dorthin gezogen wird. Dies funktioniert, aber wenn Sie in das pKind ziehen, wird das dragleavegefeuert und das divist nicht mehr rot. Wenn Sie zum Tropfen zurückkehren, wird er divauch nicht wieder rot. Es ist notwendig, sich vollständig aus dem Tropfen zu bewegen divund ihn wieder hineinzuziehen, um ihn rot zu machen.
Ist es möglich zu verhindern, dass dragleavebeim 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.
dragleavees in diesem Fall immer noch ausgelöst wird.