dragleave事件

dragleave事件

为什么我把调查内容拖拽并移入到#container里面去的时候,会出发dragleave事件?

我的操作仅仅是拖拽并移入到#container里面,并没有移出#container。


<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<meta http-equiv="X-UA-Compatible" content="ie=edge">

<title>drag</title>

<script type="text/javascript" src="../jquery-3.0.0.min.js"></script>

<style type="text/css">

.page{

width: 1000px;

margin: 0 auto;

}

.left{

width: 500px;

float: left;

}

.left .container{

padding: 10px;

min-height: 500px;

box-sizing: border-box;

}

.left .containerDrop{

background-color: #eeeeee;

}

.left .container h1{

text-align: center;

}

.right{

width: 500px;

float: left;

box-sizing: border-box;

border-left: 1px solid red;

}

.right .ctrlList{

padding: 10px;

}

.right .ctrlList .box{

border: 1px dashed gray;

margin-top: 10px;

margin-bottom: 10px;

}

.line{

margin-top: 10px;

margin-bottom: 10px;

padding: 5px;

}

</style>

</head>

<body>

<div class="page">

<div class="left">

<div id="container" class="container">

<h1>问卷</h1>

</div>

</div>

<div class="right">

<div class="ctrlList">

<div class="box" draggable="true">

<div class="line">

<span>姓名:</span>

<input type="text" name="name" placeholder="请输入真实姓名">

</div>

</div>

<div class="box" draggable="true">

<div class="line">

<span>年龄:</span>

<input type="text" name="age" placeholder="请输入真实年龄">

</div>

</div>

<div class="box" draggable="true">

<div class="line">

<span>性别:</span>

<label><input type="radio" name="gender" value="male">男</label>

<label><input type="radio" name="gender" value="female">女</label>

</div>

</div>

<div class="box" draggable="true">

<div class="line">

<span>兴趣爱好:</span>

<label><input type="checkbox" name="hobby" value="basketball">篮球</label>

<label><input type="checkbox" name="hobby" value="football">足球</label>

<label><input type="checkbox" name="hobby" value="tennis">网球</label>

<label><input type="checkbox" name="hobby" value="badminton">羽毛球</label>

<label><input type="checkbox" name="hobby" value="tabletennis">乒乓球</label>

</div>

</div>

</div>

</div>

</div>


<script>

$(function(){

var dragSrc;


$('.box').each(function(index,ele){

$(ele).on('dragstart',function(event){

dragSrc = this;

});

});


$('#container').on('drop',function(e){

e.preventDefault();

$(this).append($(dragSrc).find('.line').clone());

$(this).removeClass('containerDrop');

}).on('dragover',function(e){

e.preventDefault();

}).on('dragenter',function(e){

e.preventDefault();

$(this).addClass('containerDrop');

console.log('dragenter');

}).on('dragleave',function(e){

e.preventDefault();

$(this).removeClass('containerDrop');

console.log('dragleave');

});

})

</script>

</body>

</html>


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

3回答
慕慕3263797 2018-04-02 11:28:43

我有一个思路你可以试试:给放在container中的每个子元素也绑定dragleave和dragenter事件,在这俩事件中,设置container的样式,阻止冒泡。可以参考一下这个链接:https://blog.csdn.net/yuyuking/article/details/77096285

怎么都被占用了呢 2018-04-01 13:34:30

鼠标移入container中的子元素时,container会认为从自己这移出了,所以会触发dragleave事件。

解决方法就是将h1标题放在container容器外部,例如:

http://img1.sycdn.imooc.com//climg/5ac06f640001753e05880181.jpg

  • 提问者 倚松听花语 #1
    调查内容拖拽到左边之后,也是成为container的子元素。这样的话,当拖拽右边的内容到左边已经存在的子元素的时候,也会触发dragleave事件,导致$(this).removeClass('containerDrop');发生,也就是背景颜色无法改变。这种体验不好吧,有没有鼠标移入container中的子元素时,不触发dragleave事件的方法?
    2018-04-01 21:32:51
提问者 倚松听花语 2018-03-31 21:06:45

补充下问题,我把调查内容拖拽并移入到#container里面h1标签【问卷】的时候,会触发dragleave事件,请问这是什么原理?怎么解决这问题?

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
组件化思想开发电商网页 18版
  • 参与学习           人
  • 提交作业       467    份
  • 解答问题       4826    个

本路径带你通过系统学习HTML5、JavaScript、jQuery的进阶知识,不仅如此,还会学习如何利用组件化的思想来开发网页,知识点+案例,使得所学可以更好的得到实践。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师