阻止冒泡是为了什么?腾讯的面试题还是搞不懂

jocelyn_vampire 2015-04-10 12:05:32

要求:给table加上事件委托,如果在td上点击,td上面的背景颜色就变成红色。
可是问题来的,在td上点击的时候,onclick事件是不是会传到<tr>上呢,那是不是需要阻止冒泡呢?
面试官告诉我有一个阻止冒泡的方法是topPropagation,但是,我觉得用下面的方法也可以,那么为什么要阻止冒泡呢?
求大神解释。

function changeToRed1(e){
var eve=e||window.event;
var target=e.target||e.srcElement;
if(target.nodeName=="TD")
{
target.style.cssText+=';background:yellow;';
}
}
...全文
270 6 打赏 收藏 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jocelyn_vampire 2015-04-10
  • 打赏
  • 举报
回复
我后来搞懂了,之前一直把冒泡理解错了,以为事件的冒泡是说当冒泡到所点击的元素(target)的时候就会执行回调函数,实际上回调函数是在事件冒泡到添加句柄的元素的时候才执行的,意思是在table上加了事件委托来检测td时,在td上点击的时候,事件会向上冒泡,即td,tr,table一直到document,而回调函数是在冒泡到table的时候才执行的,那么如果是在回调函数中阻止冒泡,就是阻止从body一直到document的click事件的传播。当在body或更高层元素中加了监听事件的时候,该监听事件就不会因为我点击了td而调用,是如果我想要阻止这样的行为,才需要stopPropagation的。 希望这次没理解错,求纠正。。。。
forwardNow 2015-04-10
  • 打赏
  • 举报
回复

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        #outer {width: 200px; height: 200px; background-color: green; }
        #inner {width: 100px; height: 100px; background-color: gray; }
    </style>
</head>
<body>
<!-- 
参考:http://www.jb51.net/article/42492.htm
摘要:
    (1)冒泡型事件:事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发。
        IE 5.5: div -> body -> document
        IE 6.0: div -> body -> html -> document
        Mozilla 1.0: div -> body -> html -> document -> window
    (2)捕获型事件(event capturing):事件从最不精确的对象(document 对象)开始触发,然后到最精确(也可以在窗口级别捕获事件,不过必须由开发人员特别指定)。
    (3)DOM事件流:同时支持两种事件模型:捕获型事件和冒泡型事件,但是,捕获型事件先发生。两种事件流会触及DOM中的所有对象,从document对象开始,也在document对象结束。
-->

    <div id="outer">
        <div id="inner">
        </div>
    </div>

    <script>
        outer.onclick = function () {
            alert("outer");
        }

        inner.onclick = function ( e ) {
            alert("inner");
            /* 
            // 阻止冒泡
            e = e || window.event;  
            if (e.stopPropagation) {
                e.stopPropagation();  
            } else if (window.event) {  
                e.cancelBubble = true;  
            }
            */
        }
    </script>

</body>
</html>
  • 打赏
  • 举报
回复
看你事件绑定到哪个对象上了,你tr也绑定了事件,td也绑定了事件,点击td如果不阻止冒泡,tr的也会执行,因为点击td实际也点击了tr,td是tr的子元素,同理td的所有祖先元素有事件的都会执行,如table,body等祖先元素
hch126163 2015-04-10
  • 打赏
  • 举报
回复
如果body 有点击事件。没有阻止冒泡。会触发body的点击事件。
  • 打赏
  • 举报
回复
如果父节点没任何对应处理事件的话,那就没必要阻止冒泡……如果有了,比如点击直接跳转了,那不就坑了
luhuiming741cs 2015-04-10
  • 打赏
  • 举报
回复
TD在TR里面,点击TD是不是可以说也点击TR,这就是冒泡
基于连续与断续导通模式统一分析框架的高增益双向DC-DC变换器闭环控制与硬件实现研究(Matlab、Simulink、PSCD)内容概要:本文围绕“基于连续与断续导通模式统一分析框架的高增益双向DC-DC变换器闭环控制与硬件实现”展开研究,重点构建了适用于连续导通模式(CCM)与断续导通模式(DCM)的统一建模与控制理论框架,实现了高增益、双向能量流动的DC-DC变换器在不同工况下的稳定运行与高性能控制。研究结合Matlab、Simulink与PSCAD工具完成系统建模、闭环控制器设计、仿真验证及硬件原型开发,涵盖主电路拓扑分析、状态空间平均法建模、模式切换平滑控制策略、电压电流双闭环调节、软启动与保护机制等内容,并通过仿真与实验验证了所提方法在动态响应、效率优化与稳定性方面的优越性。; 适合人群:具备电力电子、自动控制或电气工程相关背景,从事新能源、储能、电动汽车等领域研究的研发人员及研究生。; 使用场景及目标:①掌握高增益双向DC-DC变换器的统一建模范式与模式切换控制技术;②学习如何在Matlab/Simulink/PSCAD中实现复杂电力电子系统的建模、仿真与控制器设计;③为实际工程项目中的电源变换系统开发提供理论支持与实践参考。; 阅读建议:建议结合文中提供的仿真模型与代码资源,逐步复现仿真过程,并重点关注CCM与DCM模式切换时的控制策略设计与稳定性分析,有条件者可进一步搭建硬件平台进行实验验证。

87,984

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧