不阻止ondragover默认事件就无法触发ondrop函数

不阻止ondragover默认事件就无法触发ondrop函数


下面通过代码演示这个过程

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <title>HTML 5中的拖放</title>
    <style type="text/css">
        .div1{
            width:440px;
            height:240px;
            background-color:#CCC;
            float:left;
        }
        .div2{
            width:440px;
            height:240px;
            background-color:#CCC;
            float:left;
            margin-left:50px;
        }
        .div3{
            width:440px;
            height:240px;
            background-color:#CCC;
            margin-top:5px;
        }

        .clear{
            clear: both;
        }
    </style>
    <script type="text/javascript">
        function drag(e){
            e.dataTransfer.setData("text/plain",e.target.id);
        }

        function drop(e){
            console.log(3);
            let data=e.dataTransfer.getData("text");
            e.target.appendChild(document.getElementById(data));
        }
        //不阻止ondragover的默认动作
        function allowDrop(){
            console.log(1);
        }
        //阻止ondragover的默认动作
        function allowDrop2(e){
            e.preventDefault();
            console.log(2);

        }
    </script>
</head>
<body>
<div class="div1">
    <p id="p1" ondragstart="drag(event)" draggable="true">drop</p>
</div>
<div class="div2" ondrop="drop(event)" ondragover="allowDrop(event)">
    <h2>不阻止默认事件</h2><hr/>
</div>
<div class="clear"></div>
<div class="div3" ondrop="drop(event)" ondragover="allowDrop2(event)">
    <h2>阻止默认事件</h2><hr/>
</div>
</body>
</html>

运行结果
在这里插入图片描述当拖动drop到不阻止默认事件发生的框中时,通过控制台我们发现执行了ondragover的
触发函数allowDrop()但没有执行ondrop的触发函数drop(e)。
在这里插入图片描述

当拖动drop到阻止默认事件发生的框中时,在ondragover触发函数allowDrop2()中阻止了ondragover默认事件的发生,此时ondrop执行了触发函数drop()。
在这里插入图片描述
在这里插入图片描述总结
当我们将,<p>标签的内容拖动到指定位置并松开鼠标时,在这一时刻会先触发一个ondragover事件然后才会触发ondrop事件,但在ondragover中的默认动作(就如同<a>标签的默认跳转动作一样)可能会阻止ondrop事件的发生(不清楚具体原因),此时需要调用event.preventDefault(当ondragover事件被触发时会先执行被赋予的触发函数然后才会执行默认动作)阻止默认动作的执行.

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值