Das Problem, das ich habe, ist, dass die dragleave
Ereignis eines Elements wird ausgelöst, wenn der Mauszeiger über ein untergeordnetes Element dieses Elements bewegt wird. Auch, dragenter
wird nicht ausgelöst, wenn der Mauszeiger wieder zum übergeordneten Element zurückkehrt.
Ich habe eine vereinfachte Fiedel 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 dem folgenden 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");
}
});
Es soll den Benutzer benachrichtigen, indem es die Drop div
rot, wenn etwas dorthin gezogen wird. Das funktioniert, aber wenn Sie etwas in den Bereich p
Kind, das dragleave
wird ausgelöst und die div
ist nicht mehr rot. Zurück zum Tropfen div
macht es auch nicht wieder rot. Es ist notwendig, sich vollständig aus dem Tropfen herauszubewegen div
und ziehen Sie es erneut hinein, um es rot zu machen.
Ist es möglich zu verhindern dragleave
beim Ziehen in ein untergeordnetes Element nicht ausgelöst wird?
2017 Update: TL;DR, CSS nachschlagen pointer-events: none;
wie in der Antwort von @H.D. unten beschrieben, die in modernen Browsern und IE11 funktioniert.