拖放不适用于飞行元素firefox

时间:2017-03-20 11:31:06

标签: javascript jquery html firefox drag-and-drop

我有一个生成一些可拖动元素的页面。 但是我注意到在firefox上我无法让它们在chrome上拖动我可以。要创建一个新元素,我按下创建项目按钮。这是我的代码



/*
* @param event A jquery event that occurs when an object is being dragged
*/
function dragStartHandler(event){
	//e refers to a jQuery object
	//that does not have dataTransfer property
	//so we have to refer to the original javascript event
	var originalEvent = event.originalEvent;
	var currentElement = originalEvent.target;
	console.log("Hack it");
	console.log($(currentElement).data());
	//We want to store the data-task-id of the object that is being dragged
	originalEvent.dataTransfer.setData("text",$(currentElement).data("task-id"));
	originalEvent.dataTransfer.effectAllowed = "move";
}
$(document).ready(function(){
	//When a new task/item is creatted it is assigned a unique data attribute which is the task index
	var taskIndex = 0;
	$(".text-info").addClass("text-center");
	$(".createTask").addClass("btn-block").on("click",function(){
		//Find the category whict this button belongs to 
		var currentCategory = $(this).parent(".box");
		var categoryId = currentCategory.data("category");
		//Create a new task
		var task = $("<div class='list-group-item droppable' draggable='true' data-task-id="+taskIndex+"></div>");
		//Assign a data-task-id attribute and set its text
		task.text("Data id = "+taskIndex);

		taskIndex++;
		task.appendTo($(this).prev(".dropTarget"));
	});
	$(".droppable").on("dragstart",dragStartHandler);
	$(".dropTarget").on("dragenter",function(event){
		event.preventDefault();
		event.stopPropagation();
		$(this).addClass("highlighted-box");
	}).on("dragover",false)
	.on("drop",function(event){
		event.preventDefault();
		event.stopPropagation();
		var originalEvent = event.originalEvent;
		//Retrieve the data-task-id we stored in the event
		var taskId = originalEvent.dataTransfer.getData("text");
		console.log(taskId);
		//The object that will be moved is determined by the id we stored on the event parameter
		var objectToMove =$("body").find(`[data-task-id='${taskId}']`);
		console.log(objectToMove);
		var category = $(this).parent(".box").data("category");
		objectToMove.data("category-group",category);
		//Remove the square object from its previous position 
		//and append it to the current dropTarget
		$(objectToMove).appendTo(this);
		return false;
	});
});
&#13;
.highlighted-box {
    box-shadow: 0 0 4px 4px #EBE311;
}

.dropTarget {
    height: 10em;
    width: 10em;
    /* border:2px solid; */
    margin: auto;
}
.dropTarget .droppable{
	margin: auto;
	position: relative;
	top: 20%;
}
.droppable {
    background-color: dodgerblue;
   /*  height: 6em;
   border-radius: 5px; */
   /*  box-shadow: 0 0 5px 5px #3D0404; */
    /* width: 6em; */
}
#square2{
	background-color: red;
}
&#13;
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.1/jquery.min.js"></script>
<body>
	<div class="jumbotron intro text-center">
		<h1>Drag and drop demo</h1>
	</div>
	<div class="row">
		<div class="col-md-3 box" data-category="0">
			<h1 class="text-info">Ideas</h1>
			<div class="dropTarget list-group">
			</div>
			<div class="btn btn-info createTask">
				Create item
			</div>
		</div>
		<div class="col-md-3 box" data-category="1">
			<h1 class="text-info">Wornking on</h1>
			<div class="dropTarget list-group">
			</div>
			<div class="btn btn-info createTask">
				Create item
			</div>
		</div>
		<div class="col-md-3 box" data-category="2">
			<h1 class="text-info">Completed</h1>
			<div class="dropTarget list-group">
			</div>
			<div class="btn btn-info createTask">
				Create item
			</div>
		</div>
		<div class="col-md-3 box" data-category="3">
			<h1 class="text-info">Accepted</h1>
			<div class="dropTarget list-group">
			</div>
			<div class="btn btn-info createTask">
				Create item
			</div>
		</div>
	</div>
	<div class="container">
		<div class="row">
			<div class="col-md-6">
				<div id="square" draggable="true" data-index = "0" class="droppable list-group-item"></div>
			</div>
			<div class="col-md-6">
				<div id="square2" class="droppable list-group-item" draggable="true" data-index="1"></div>
			</div>
		</div>
	</div>
</body>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

我的代码的问题是事件委托。 为了解决这个问题,我做了以下几点:

$("body").on("dragstart",".droppable",dragStartHandler);

您可以在此处找到更多here