js 冒泡事件与事件监听使用分析
作者:bea
冒泡事件 js中“冒泡事件(bubble)”并不是能实际使用的花哨技巧,它是一种对js事件执行顺序的机制,“冒泡算法”在编程里是一个经典问题,冒泡算法里面的“冒泡”应该说是交换更加准确;js里面的“冒泡事件”才是真正意义上的“冒泡”,它从DOM最低层逐层遍历树,然后附加相应事件。以下面代码为例: <title>冒泡事件</title> <script type="text/javascript"> function Add(sText)
冒泡事件
js中“冒泡事件(bubble)”并不是能实际使用的花哨技巧,它是一种对js事件执行顺序的机制,“冒泡算法”在编程里是一个经典问题,冒泡算法里面的“冒泡”应该说是交换更加准确;js里面的“冒泡事件”才是真正意义上的“冒泡”,它从DOM最低层逐层遍历树,然后附加相应事件。以下面代码为例:
<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;">点击</p>
</div>
<div id="Console" style="border:solid 1px #ee0; background:#ffc;"></div>
</body>
[Ctrl+A 全选 注:
如需引入外部Js需刷新才能执行]
查看运行效果
事件监听
事件监听准确一点讲可以说是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>
[Ctrl+A 全选 注:
如需引入外部Js需刷新才能执行]
查看运行结果
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>
[Ctrl+A 全选 注:
如需引入外部Js需刷新才能执行]
查看运行效果
从上面两个例子看出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">»»</button>
</body>
[Ctrl+A 全选 注:
如需引入外部Js需刷新才能执行]
有用 | 无用
js中“冒泡事件(bubble)”并不是能实际使用的花哨技巧,它是一种对js事件执行顺序的机制,“冒泡算法”在编程里是一个经典问题,冒泡算法里面的“冒泡”应该说是交换更加准确;js里面的“冒泡事件”才是真正意义上的“冒泡”,它从DOM最低层逐层遍历树,然后附加相应事件。以下面代码为例:
<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;">点击</p>
</div>
<div id="Console" style="border:solid 1px #ee0; background:#ffc;"></div>
</body>
[Ctrl+A 全选 注:
如需引入外部Js需刷新才能执行]
查看运行效果
事件监听
事件监听准确一点讲可以说是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>
[Ctrl+A 全选 注:
如需引入外部Js需刷新才能执行]
查看运行结果
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>
[Ctrl+A 全选 注:
如需引入外部Js需刷新才能执行]
查看运行效果
从上面两个例子看出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">»»</button>
</body>
[Ctrl+A 全选 注:
如需引入外部Js需刷新才能执行]
有用 | 无用
猜你喜欢
您可能感兴趣的文章:
- 用Javascript 获取页面元素的位置的代码
- Javascript showModalDialog两个窗体之间传值
- Javascript 两个窗体之间传值实现代码
- Javascript 数组添加 shuffle 方法的实现代码
- Javascript 数组添加一个 indexOf 方法的实现代码
- jQuery 使用手册(七)
- jQuery 使用手册(六)
- jQuery 使用手册(五)
- jQuery 使用手册(四)
- jQuery 使用手册(三)
- jQuery 使用手册(二)
- jQuery 使用手册(一)
- 没有form表单情况下敲回车键提交表单的js代码
- JavaScript 变量命名规则
- js 获取中文拼音,Select自动匹配字母获取值的代码
- jquery ajax 登录验证实现代码
- 比较全面的event对像在IE与FF中的区别 推荐
- ie与ff下的event事件
- javascript 必知必会之closure