javascript - JS怎么实现子元素mousedown不触发父元素的click事件
天蓬老师
天蓬老师 2017-04-10 15:35:19
[JavaScript讨论组]

因一个需求需要做父元素做点击事件,子元素有拖动事件,但是现在的父元素的点击事件影响了拖动,我做了一个demo,请问各路大侠们,如何对#idDrag的mouseup放开后不触发#DragContent的点击事件呢。

PS :鄙人使用了另一个比较笨的方法解决的,#idDrag拖动的时候就注销了#DragContent的click事件,#idDrag拖动结束(mouseup)后再重新绑定#DragContent的click事件。

感谢各位的细心回答,click时间是可以通过stopPropagation()阻止冒泡,但是我的我的用例是如果 $('#idDrag')绑定的是mousedown事件,不想出发父元素的click事件,该如何做到呢?

DEMO CODE





简易拖放效果













我想按住拖动元素放开了不触发DragContent的点击事件
天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(2)
PHP中文网
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>简易拖放效果</title>


<style>
    #DragContent{
        width:500px;
        height:500px;
        background:#efefef;
        position: relative;
    }
    #idDrag {
        position: absolute;
        top: 0;
        left: 0;
        border: 5px solid #0000ff;
        background: #c4e3fd;
        width: 50px;
        height: 50px;
    }
</style>
</head>

<body>




<p id="DragContent">
    <p id="idDrag"></p>
</p>



我想按住拖动元素放开了不触发DragContent的点击事件
<script src="http://cdn.bootcss.com/jquery/2.1.4/jquery.js"></script>


<script>
$(document).ready(function(){
    $('#DragContent').bind('click', function(){
        console.log('dragcontent');
    });
    $('#idDrag').bind('click', function(){
        console.log('iddrag');
        return false;
    });
});
</script>


</body>
</html>


用 jquery 实现了下, 没用拖动事件, 但是逻辑都是一样的, 可以改写成原生的 js , 实现方式就是在绑定 iddrag 事件的时候, 使用 return false 返回, 这样就不会继续像下触发, 所以 dragcontent 就不会被执行

PHP中文网

同意楼上的return false。DOM事件处理有三个阶段:

  1. 捕捉阶段(capture phase):从最上层元素,直到最下层(你点击的那个target)元素。路过的所有节点都可以捕捉到该事件。
  2. 命中阶段(target phase):如果该事件成功到达了target元素,它会进行事件处理。
  3. 冒泡阶段(bubbling phase):事件从最下层向上传递,依次触发父元素的该事件处理函数。

在任意一个阶段的事件处理函数中,都可以通过调用event.stopPropagation来中断事件流,后续的阶段将不会被调用。

其实return false做了三件事:

  1. stopPropagation():阻止事件传播
  2. preventDefault():禁止浏览器默认行为,比如<a>标签被点击后页面会跳转
  3. 立即结束当前函数并返回,当然。

你还可以通过delegate实现更加高效和简洁的事件处理过程,具体可以看这篇文章:

jQuery事件:bind、delegate、on

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号