为了账号安全,请及时绑定邮箱和手机立即绑定

事件冒泡不是向上传递么?为什么给div添加事件,a会截停? 这个怎么又像捕获了那? 看完这个案例我又晕了!

<div class="left">
    <p class="aaron">
        <a>目标节点</a> //点击在这个元素上
    </p>
</div>


正在回答

5 回答

我也是初学者,下面是我的理解

<!DOCTYPE html>
<html>

<head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <title></title>
    <style>
    .left div,
    .right div {
        width: 500px;
        height: 50px;
        padding: 5px;
        margin: 5px;
        float: left;
        border: 1px solid #ccc;
    }
    
    .left div {
        background: #bbffaa;
    }
    
    .right div {
        background: yellow;
    }
    </style>
    <script src="http://libs.baidu.com/jquery/1.9.1/jquery.js"></script>
</head>

<body>
    <h2>on事件委托</h2>
    <div class="left">
        <div class="aaron">
            <a>点击这里</a>
            <p>试下点击这里</p>
        </div>
    </div>    
    <script type="text/javascript">
    //给body绑定一个click事件
    //没有直接a元素绑定点击事件
    //通过委托机制,点击a元素的时候,事件触发
    //$('body').on('click', function(e) )
    $('body').on('click','a', function(e) {
       alert(e.target.textContent)
    })
    </script>
</body>

</html>

你可以试着运行上面的代码,观察$('body').on('click','a', function(e) )和$('body').on('click', function(e) )的运行结果的不同。你会发现$('body').on('click','a', function(e) )情况下,只有点击<a>才会触发click事件,而在$('body').on('click', function(e) )情况下点击页面内的任何元素都可以促发click事件。认真理解老师给$('body').on('click','a', function(e) )的三句注释:

  • //给body绑定一个click事件

  • //没有直接a元素绑定点击事件

  •  //通过委托机制,点击a元素的时候,事件触发

我们给body绑定的click事件,为什么只有在点击<a>元素的时候才会触发click事件呢?因为我们把click事件委托了<a>.

能理解吗

4 回复 有任何疑惑可以回复我~
#1

码农吊车尾 提问者

恩恩,非常感谢
2016-10-16 回复 有任何疑惑可以回复我~

其实事件委托的关键就是on里面的选择器参数,它决定了事件发生的范围!

1 回复 有任何疑惑可以回复我~

大神,能解答一下:浏览器的默认行为有哪些?有哪些事件可以触发浏览器的默认行为?

0 回复 有任何疑惑可以回复我~
$("div").on("click","p",fn)
哪位老师能解释一下,这句话的意思,事件委托的机制的详细顺序是什么?
0 回复 有任何疑惑可以回复我~
#1

qq_苏慕遮_24019744

我觉得是 当点击p元素或者是p的子元素的时候运行fn,至于这个委托什么的我看不懂,但是我写了几步尝试了一下,感觉这个中间的p更像是一个限制,用来限制你点击有反应的区域
2016-10-25 回复 有任何疑惑可以回复我~

并不是截停,而是委托,依旧向上传递,只是后面的函数的参数委托给了a,即以a为参数。不过还是会向上传递的。

0 回复 有任何疑惑可以回复我~
#1

码农吊车尾 提问者

还是没明白,那是将div的click事件传给了 div里面最底层的元素,然后再冒泡,设置参数后再停止么?
2016-10-12 回复 有任何疑惑可以回复我~
#2

ghgytr3603800

回复 Chrisgad:你点击的是a
2016-10-12 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

事件冒泡不是向上传递么?为什么给div添加事件,a会截停? 这个怎么又像捕获了那? 看完这个案例我又晕了!

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信