【发布时间】:2016-02-03 12:15:39
【问题描述】:
我将 div 包含在另一个父 div 中,这两个父 div 都允许“删除”。
两种情况:
当我在子框中放置元素时,都执行dragleave事件,因此正确删除了两个元素的红色类,但
drop没有执行
当我将元素放入子框中时,不会执行 dragleave 事件,并且仅在子元素上删除红色类(“drop”事件侦听器中包含的代码)
问题:
在情况 2 中,如果我将元素放入名为 div 的子元素中,则红色类仅在子 div 中删除,而不在父 div 中删除。在不通过event.path对象的情况下删除所有父母的班级怎么办?
这是案例 1 的 Fiddler
这是案例 2 的Fiddler
var myApp = angular.module('myApp',[]);
myApp.controller('MyCtrl', ['$scope', function ($scope)
{
}]);
myApp.directive('drop', function() {
return{
restrict: "A",
replace: false,
link: function (scope, element, attrs, ctlr) {
var obj = element[0];
var DragLeaveCounter=0;
obj.addEventListener("dragenter", function (eventObject) {
eventObject.preventDefault();
DragLeaveCounter++;
if (DragLeaveCounter === 1) {
obj.classList.add( 'red' );
};
console.log("enter" , obj.id , DragLeaveCounter );
}, false);
obj.addEventListener("dragleave", function (eventObject) {
eventObject.preventDefault();
DragLeaveCounter--;
if (DragLeaveCounter <= 0) {
obj.classList.remove('red');
}
console.log("leave" , obj.id , DragLeaveCounter);
}, false);
obj.addEventListener("drop", function (eventObject) {
eventObject.preventDefault();
eventObject.stopPropagation();
console.log("drop" , obj.id , eventObject);
obj.classList.remove("red");
DragLeaveCounter=0;
}, false);
obj.addEventListener("dragover", function (eventObject) {
//TODO Remove comment in next line:
eventObject.preventDefault();
console.log("dragover");
}, false);
}
}
});
/* Styles go here */
#parent{
width:200px;
height:200px;
border:1px solid red;
position:relative;
}
#child{
position:absolute;
left:50px;
top:50px;
width:50px;
height:50px;
background-color:#c7a499;
}
#child2{
position:absolute;
left:50px;
top:110px;
width:50px;
height:50px;
background-color:#c7a499;
}
.red {
background-color: red !important;
}
.green {
background-color: green;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp" ng-controller="MyCtrl" >
<i> Remove comment on line 43 in js to see what the difference (Please open the console)</i>
<div id="drag" draggable="true">drag me</div>
<hr>
<div id="parent" drop>
Parent
<div id="child" drop>
child
</div>
<div id="child2" >
child 2
</div>
</div>
</div>
【问题讨论】:
-
看来问题出在那个
eventObject.stopPropagation();
标签: html drag-and-drop dom-events draggable drag