冒泡事件

js中“冒泡事件”并不是能实际使用的花哨技巧,它是一种对js事件执行顺序的机制,“冒泡算法”在编程里是一个经典问题,冒泡算法里面的冒泡应该说是交换更加准确;js里面的“冒泡事件”才是真正意义上的“冒泡”,它从DOM最低层逐层遍历树,然后附加相应事件。以下面代码为例:

<title>冒泡事件</title>
<script type="text/javascript">
function Add(sText)
{
    document.getElementById("Console").innerHTML +=sText;
}
</script>
</head>

<body onclick="Add('body事件触发<br />')">
<div onclick="Add('div事件触发<br />')">
    <p onclick="Add('p事件触发<br />')" style="background:#c00;">点击</p>
</div>
<div id="Console" style="border:solid 1px #ee0; background:#ffc;"></div>
</body>
 

查看运行效果

事件监听

事件监听准确一点讲可以说是js引擎对用户鼠标、键盘、窗口事件等动作的监视进行的操作,也就是针对用户相应的操作进行附加事件,常用的类似btnAdd.onclick="alert('51obj.cn')"就是一种简单的附加事件,只不过这种方法不支持附加多个事件以及删除事件。以下代码将实现附加事件后删除事件(IE下):

<script type="text/javascript">
<!–
var oP;
function window.onload(){
    oP=document.getElementById("pContent");
    oP.attachEvent("onclick",Click);
}
function Click(){
    alert("做点什么吧");
    oP.detachEvent("onclick",Click);
}
//–>
</script>
</head>

<body>
<p id="pContent" style="border:solid 1px #d00; background:#cff;">点击</p>
 

查看运行结果

IE不能称为标准的DOM浏览器,即使是最新的IE8,相对于标准DOM如Firefox、Opera等,它是个“异类”;在Firefox中才真正有称为事件监听的函数addEventListener,如下例

<script type="text/javascript">
<!–
window.onload=function(){
    var oBtn=document.getElementById("btn");
    oBtn.addEventListener("click",Click,false);
}
function Click(){
    alert("触发click事件");
}
//–>
</script>
<button id="btn">点击</button>
 

查看运行效果

从上面两个例子看出attachEvent在Firefox中并不支持,IE也不支持addEventListener.因此需要使用兼容性的方法。

 

<script type="text/javascript">
<!–
var oBtn;
window.onload=function(){
    oBtn=document.getElementById("btn");
    if(window.addEventListener){
        oBtn.addEventListener("click",Click,false);
    }//FF,Opera…
    else if(window.attachEvent){
        oBtn.attachEvent("onclick",Click,false);
    }//IE
    else{
        oBtn.onclick=Click;
    }//Other
}

function Click(){
    alert("事件只执行一次");
    if(window.addEventListener){
        oBtn.removeEventListener("click",Click,false);
    }//FF
    else if(window.attachEvent){
        oBtn.detachEvent("onclick",Click);
    }
    else{
        oBtn.onclick=null;
    }
}
//–>
</script>
</head>

<body>
<button id="btn">www.51obj.cn&raquo;&raquo;</button>
</body>
 

查看运行结果

Related posts:

  1. Javascript系列教程:面向对象讲解(三) 对象的访问修饰条符 <script type="text/javascript"> function Person(){ var Name="Wang Hongjian"; var Age=22;//私有成员...
  2. 详解js中typeof、instanceof与constructor typeof返回一个表达式的数据类型的字符串,返回结果为js基本的数据类型,包括number,boolean,string,object,undefined,function.语法为typeof(data) instanceof则为判断一个对象是否为某一数据类型,或一个变量是否为一个对象的实例;返回boolean类型 语法为 o instanceof A ...

以上关联文章由 Yet Another Related Posts Plugin 提供支持。