JavaScript事件冒泡传递及阻止传递

本文详细介绍了JavaScript中的事件冒泡机制,并通过实例演示了如何在不同浏览器环境下阻止事件冒泡。此外,还讨论了如何获取触发事件的目标元素,以及特定标签如form的行为特点。

JavaScript事件冒泡传递:

 

<title>冒泡事件</title>

<script type="text/javascript">
function Add(sText)
{
document.getElementById("Console").innerHTML +=sText;
}
</script>

</head>
<body onclick="Add('body事件触发')">

 

<div onclick="Add('div事件触发')">
<p onclick="Add('p事件触发')" style="background:#c00;">点击
</div>

 

<div id="Console" style="border:solid 1px #ee0; background:#ffc;"></div>

</body>

 

阻止事件冒泡传递:

 

//如果提供了事件对象,则这是一个非IE浏览器
if ( e && e.stopPropagation )
//因此它支持W3C的stopPropagation()方法
e.stopPropagation();
else
//否则,我们需要使用IE的方式来取消事件冒泡
window.event.cancelBubble = true;
return false;

2.阻止浏览器的默认行为

JavaScript代码

//如果提供了事件对象,则这是一个非IE浏览器
if ( e && e.preventDefault )
//阻止默认浏览器动作(W3C)
e.preventDefault();
else
//IE中阻止函数器默认动作的方式
window.event.returnValue = false;
return false;

 

示例:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "">
<html>
    <head>
        <title> </title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <meta name="keywords" content="JavaScript,事件冒泡,cancelBubble,stopPropagation" />
        <script type="text/javascript">
            function doSomething(obj, evt){
                alert(obj.id);
                var e = (evt) ? evt : window.event;
                if (window.event) {
                    e.cancelBubble = true;
                }
                else {
                    //e.preventDefault();
                    e.stopPropagation();
                }
            }
        </script>
    </head>
    <body>
        <div id="parent1" onclick="alert(this.id)" style="width:250px;background-color:yellow;">
            <p>
                This is parent1 div.
            </p>
            <div id="child1" onclick="alert(this.id)" style="width:200px;background-color:orange">
                <p>
                    This is child1.
                </p>
            </div>
            <p>
                This is parent1 div.
            </p>
        </div>
        <br/>
        <div id="parent2" onclick="alert(this.id)" style="width:250px;background-color:cyan;">
            <p>
                This is parent2 div.
            </p>
            <div id="child2" onclick="doSomething(this,event);" style="width:200px;background-color:lightblue;">
                <p>
                    This is child2. can't bubble.
                </p>
            </div>
            <p>
                This is parent2 div.
            </p>
        </div>
    </body>
</html>

form标签不支持冒泡,一个页面可以有多个form,但是form不能嵌套,如果form嵌套了,内嵌的form表单submit没有反应,最外层的form表单是可以提交的。

========================================================================

 

IE:中用window.event.srcElement取得当前元素
FF:中用event.target取得当前元素

document.onclick = function(e)    //要兼容FF的话,e这个参数一定要写上
{
    e                = window.event || e;
    var srcElement   =   e.srcElement || e.target;
    alert(srcElement.innerHTML);
}

 

<html>
<script>
function   getEvent()
{ var   i   =   0;
if(document.all) return   window.event;
func=getEvent.caller;
while(func!=null)
{
var   arg0=func.arguments[0];
if(arg0)
{
if(arg0.constructor==Event){
return   arg0;
}
}
func=func.caller;
}
return   null;
}

document.onclick   =   function(e)   //要兼容FF的话,这个参数一定要写上
{
    e   =   getEvent();
    var   srcElement   =   e.srcElement   ||   e.target;
    alert(srcElement.innerHTML);
}
</script>
<body>
window.event事件测试 <br>
<input   type= "button "   name= "b_test "   value= "测试 ">
</body>
</html>

 

内容概要:本文详细介绍了“秒杀商城”微服务架构的设计与实战全过程,涵盖系统从需求分析、服务拆分、技术选型到核心功能开发、分布式事务处理、容器化部署及监控链路追踪的完整流程。重点解决了高并发场景下的超卖问题,采用Redis预减库存、消息队列削峰、数据库乐观锁等手段保障数据一致性,并通过Nacos实现服务注册发现与配置管理,利用Seata处理跨服务分布式事务,结合RabbitMQ实现异步下单,提升系统吞吐能力。同时,项目支持Docker Compose快速部署和Kubernetes生产级编排,集成Sleuth+Zipkin链路追踪与Prometheus+Grafana监控体系,构建可观测性强的微服务系统。; 适合人群:具备Java基础和Spring Boot开发经验,熟悉微服务基本概念的中高级研发人员,尤其是希望深入理解高并发系统设计、分布式事务、服务治理等核心技术的开发者;适合工作2-5年、有志于转型微服务或提升架构能力的工程师; 使用场景及目标:①学习如何基于Spring Cloud Alibaba构建完整的微服务项目;②掌握秒杀场景下高并发、超卖控制、异步化、削峰填谷等关键技术方案;③实践分布式事务(Seata)、服务熔断降级、链路追踪、统一配置中心等企业级中间件的应用;④完成从本地开发到容器化部署的全流程落地; 阅读建议:建议按照文档提供的七个阶段循序渐进地动手实践,重点关注秒杀流程设计、服务间通信机制、分布式事务实现和系统性能优化部分,结合代码调试与监控工具深入理解各组件协作原理,真正掌握高并发微服务系统的构建能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值