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

JavaScript事件冒泡传递:

 

<title>冒泡事件</title>

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

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

 

<div οnclick="Add('div事件触发')">
<p οnclick="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" οnclick="alert(this.id)" style="width:250px;background-color:yellow;">
            <p>
                This is parent1 div.
            </p>
            <div id="child1" οnclick="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" οnclick="alert(this.id)" style="width:250px;background-color:cyan;">
            <p>
                This is parent2 div.
            </p>
            <div id="child2" οnclick="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>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值