2017-09-15 8 views
0

オブジェクトをドロップゾーンにドロップすると、javascript onDropイベントは実行されません。私は幸運とエラーメッセージのいずれかで少なくとも半ダースの方法でこれを書き直そうとしました。私が実行したからondropイベントを妨げる理由のために周りを探していた。javascript onDropイベントが実行されていません

HTML5/Canvas onDrop event isn't firing? 、私の知る限りhttps://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/Drag_operations#droptargets

が、私はondropイベントをトリガするために、すべての3つの要件を達成しました。私はondragenterイベントとondragoverイベントの両方を実装しました。両方ともevent.preventDefault(); falseを返します。私もevent.preventDefault()を持っています。 ondropイベントで。ここで

var app = angular.module('myApp', []); 
 

 
app.controller('myCtrl', function($scope) { 
 
    $scope.lists = [{name: "A", list: ["A Object 1", "A Object 2", "A Object 3"]}, 
 
     {name: "B", list: ["B Object 1", "B Object 2", "B Object 3"]}]; 
 
    $scope.drag_index = null; 
 
    $scope.drag_obj = null; 
 
}); 
 

 
var dragging = false; 
 

 
function toggle_dz() { 
 
    $(".drop-it").toggle(); 
 
} 
 

 
function get_gbls(cs) { 
 
\t \t while (cs.$parent) { 
 
     cs = cs.$parent; 
 
    } 
 
    return cs; 
 
} 
 

 
app.directive('zoneIt', function(){ 
 
    return { 
 
     restrict: 'A', 
 
     link: function(scope, element, attrs){ 
 
      $(element).on('dragenter',function(event){ 
 
       event.preventDefault(); 
 
       console.log("Drag Enter!"); 
 
       return false; 
 
      }); 
 
      $(element).on('dragover',function(event){ 
 
       event.preventDefault(); 
 
       console.log("Drag Over!"); 
 
       return false; 
 
      }); 
 
     } 
 
    }; 
 
}); 
 

 
app.directive('dragIt', function(){ 
 
    return { 
 
     restrict: 'A', 
 
     link: function(scope, element, attrs){ 
 
      $(element).on('drag',function(event){ 
 
       var scope = angular.element(event.target).scope(); 
 
       get_gbls(scope).drag_index = scope.$index; 
 
       get_gbls(scope).drag_obj = scope.obj; 
 
       if (!dragging) { 
 
        toggle_dz(); 
 
        dragging = true; 
 
       } 
 
      }); 
 
      $(element).on('drop',function(event){ 
 
       event.preventDefault(); 
 
       alert("DROPPED!"); 
 
      }); 
 
      $(element).on('dragend',function(event){ 
 
       toggle_dz(); 
 
       dragging = false; 
 
       var scope = angular.element(event.target).scope(); 
 
       get_gbls(scope).drag_index = null; 
 
       get_gbls(scope).drag_obj = null; 
 
       get_gbls(scope).$apply(); 
 
      }); 
 
     } 
 
    }; 
 
});
.zone-it { 
 
    height: 150px; 
 
    width: 90%; 
 
    background-color: #1B6269; 
 
    border: 10px dashed #4D3A44; 
 
    border-radius: 10px; 
 
    margin: 10px 5%; 
 
    padding: 15px; 
 
    font-size: 100px; 
 
    color: #4D3A44; 
 
    text-shadow: 0 0 10px black; 
 
} 
 
.zone-it span { 
 
    display: block; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script> 
 
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
 
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/> 
 
<div class="container-fluid" ng-app="myApp" ng-controller="myCtrl"> 
 
    <h2>Angular Drag n Drop</h2> 
 
    <div class="col-xs-6" ng-repeat="list in lists"> 
 
    <h3>{{list.name}}</h3> 
 
    <hr> 
 
    <div class="col-xs-12 drop-it zone-it" zone-it style="display: none;"><span class="text-center glyphicon glyphicon-download"></span></div> 
 
    <div class="drop-it container-it"> 
 
     <div class="col-sm-6 col-md-4 col-lg-3" ng-repeat="obj in list.list"> 
 
     <div class="thumbnail drag-it" draggable="true" drag-it style="cursor:pointer"> 
 
      <div class="caption text-center">{{obj}}</div> 
 
     </div> 
 
     </div> 
 
    </div> 
 
    </div> 
 
</div>

私のコードのバイオリンです:だからhttps://jsfiddle.net/Ashkeelun/2uLwd077/1/

答えて

0

、私はそれを考え出しました。オンドロップイベントは、ドラッグされているアイテムではなくドロップゾーンに属します。

https://jsfiddle.net/Ashkeelun/2uLwd077/4/

var app = angular.module('myApp', []); 
 

 
app.controller('myCtrl', function($scope) { 
 
    $scope.lists = [{name: "A", list: ["A Object 1", "A Object 2", "A Object 3"]}, 
 
    \t \t \t \t \t \t \t \t {name: "B", list: ["B Object 1", "B Object 2", "B Object 3"]}]; 
 
    $scope.drag_index = null; 
 
    $scope.drag_obj = null; 
 
}); 
 

 
var dragging = false; 
 

 
function toggle_dz() { 
 
    $(".drop-it").toggle(); 
 
} 
 

 
function get_gbls(cs) { 
 
\t \t while (cs.$parent) { 
 
     cs = cs.$parent; 
 
    } 
 
    return cs; 
 
} 
 

 
app.directive('zoneIt', function(){ 
 
    return { 
 
     restrict: 'A', 
 
     link: function(scope, element, attrs){ 
 
      $(element).on('dragenter',function(event){ 
 
       event.preventDefault(); 
 
       console.log("Drag Enter!"); 
 
       return false; 
 
      }); 
 
      $(element).on('dragover',function(event){ 
 
       event.preventDefault(); 
 
       console.log("Drag Over!"); 
 
       return false; 
 
      }); 
 
      $(element).on('drop',function(event){ 
 
       event.preventDefault(); 
 
       alert("DROPPED!"); 
 
      }); 
 
     } 
 
    }; 
 
}); 
 

 
app.directive('dragIt', function(){ 
 
    return { 
 
     restrict: 'A', 
 
     link: function(scope, element, attrs){ 
 
      $(element).on('drag',function(event){ 
 
       var scope = angular.element(event.target).scope(); 
 
       get_gbls(scope).drag_index = scope.$index; 
 
       get_gbls(scope).drag_obj = scope.obj; 
 
       if (!dragging) { 
 
        toggle_dz(); 
 
        dragging = true; 
 
       } 
 
      }); 
 
      $(element).on('dragend',function(event){ 
 
       toggle_dz(); 
 
       dragging = false; 
 
       var scope = angular.element(event.target).scope(); 
 
       get_gbls(scope).drag_index = null; 
 
       get_gbls(scope).drag_obj = null; 
 
       get_gbls(scope).$apply(); 
 
      }); 
 
     } 
 
    }; 
 
});
.zone-it { 
 
    height: 150px; 
 
    width: 90%; 
 
    background-color: #1B6269; 
 
    border: 10px dashed #4D3A44; 
 
    border-radius: 10px; 
 
    margin: 10px 5%; 
 
    padding: 15px; 
 
    font-size: 100px; 
 
    color: #4D3A44; 
 
    text-shadow: 0 0 10px black; 
 
} 
 
.zone-it span { 
 
    display: block; 
 
}
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
 
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> 
 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script> 
 
<div class="container-fluid" ng-app="myApp" ng-controller="myCtrl"> 
 
    <h2>Angular Drag n Drop</h2> 
 
    <div class="col-xs-6" ng-repeat="list in lists"> 
 
    <h3>{{list.name}}</h3> 
 
    <hr> 
 
    <div class="col-xs-12 drop-it zone-it" zone-it style="display: none;"><span class="text-center glyphicon glyphicon-download"></span></div> 
 
    <div class="drop-it container-it"> 
 
     <div class="col-sm-6 col-md-4 col-lg-3" ng-repeat="obj in list.list"> 
 
     <div class="thumbnail drag-it" draggable="true" drag-it style="cursor:pointer"> 
 
      <div class="caption text-center">{{obj}}</div> 
 
     </div> 
 
     </div> 
 
    </div> 
 
    </div>

関連する問題