JS事件捕捉测试
2012-11-23 22:36
148 查看
这两天在看“前沿视频教室“网站的js视频,看到第六课javascript事件,为了巩固其中的“事件监听”,做了个简单的demo学习。这是我的body内容:
我想通过点击div中相应的子标签 弹出标签内容。
于是我根据视频中的代码这样写js部分:
在谷歌、火狐中“成功”实现了,但是IE中却怎么点都没反应。做些调试后发现是target的问题,原来IE不支持target属性。好在IE有自己的“target”——srcElement。于是这里加个判断:
这样就成功实现了吗?不对,还是有问题。当我点击在div内的空白部分时,竟然会弹出这样的提示框!
原来target和srcElement的事件捕捉还包括父节点的,好家伙…于是我只好再写判断,获取子节点:
嗯,这样就完美了,嘿嘿。
后来才知道原来还可以这样写:
最后的结果是一样的,后者好像更容易理解一些。
知识梳理:
e对象代表事件的状态,比如事件在其中发生的元素、键盘按键的状态、鼠标的位置、鼠标按钮的状态。(IE需要if(window.event) e=window.event来建立)
target事件属性可返回事件的目标节点(触发该事件的节点),如生成事件的元素、文档或窗口。http://www.w3school.com.cn/htmldom/event_target.asp
IE不支持target属性,有自己“target”——srcElement。使用方法一样。
nodeType判断节点类型。
http://www.w3school.com.cn/htmldom/dom_nodes_info.asp
1为元素节点;
2为属性节点;
3为文本节点;
Demo下载:http://pan.baidu.com/share/link?shareid=126379&uk=3221702211
<div id="judge"> <a>我是a</a> <p>我是p</p> <span>我是span</span> </div>
我想通过点击div中相应的子标签 弹出标签内容。
于是我根据视频中的代码这样写js部分:
window.onload=function(){ var judge=document.getElementById("judge"); judge.onclick=judge_click; function judge_click(e){ if(window.event) e=window.event; /*为IE写赋值*/ alert(e.target.innerHTML); } }
在谷歌、火狐中“成功”实现了,但是IE中却怎么点都没反应。做些调试后发现是target的问题,原来IE不支持target属性。好在IE有自己的“target”——srcElement。于是这里加个判断:
window.onload=function(){ var judge=document.getElementById("judge"); judge.onclick=judge_click; function judge_click(e){ if(window.event) e=window.event; if(e.target){ //能获取到target则用,不能则… alert(e.target.innerHTML); } else{ alert(e.srcElement.innerHTML); } } }
这样就成功实现了吗?不对,还是有问题。当我点击在div内的空白部分时,竟然会弹出这样的提示框!
原来target和srcElement的事件捕捉还包括父节点的,好家伙…于是我只好再写判断,获取子节点:
window.onload=function(){ var judge=document.getElementById("judge").childNodes; for(i=0;i<judge.length;i++){ if(judge[i].nodeType==1){ judge[i].onclick=judge_click; } } function judge_click(e){ if(window.event) e=window.event; if(e.target){ alert(e.target.innerHTML); } else{ alert(e.srcElement.innerHTML); } } }
嗯,这样就完美了,嘿嘿。
后来才知道原来还可以这样写:
window.onload=function(){ //var judge=document.getElementById("judge").childNodes; // for(i=0;i<judge.length;i++){ // if(judge[i].nodeType==1){ // judge[i].onclick=judge_click; // } // } var judge=document.getElementById("judge"); var zjudge=judge.getElementsByTagName("*"); for(i=0;i<zjudge.length;i++) zjudge[i].onclick=judge_click; function judge_click(e){ if(window.event) e=window.event; if(e.target){ alert(e.target.innerHTML); } else{ alert(e.srcElement.innerHTML); } } }
最后的结果是一样的,后者好像更容易理解一些。
知识梳理:
e对象代表事件的状态,比如事件在其中发生的元素、键盘按键的状态、鼠标的位置、鼠标按钮的状态。(IE需要if(window.event) e=window.event来建立)
target事件属性可返回事件的目标节点(触发该事件的节点),如生成事件的元素、文档或窗口。http://www.w3school.com.cn/htmldom/event_target.asp
IE不支持target属性,有自己“target”——srcElement。使用方法一样。
nodeType判断节点类型。
http://www.w3school.com.cn/htmldom/dom_nodes_info.asp
1为元素节点;
2为属性节点;
3为文本节点;
Demo下载:http://pan.baidu.com/share/link?shareid=126379&uk=3221702211
相关文章推荐
- asp.net,js捕捉文本框回车键事件,兼容FF
- js捕捉回车事件
- js 捕捉元素事件
- js事件冒泡实例分享(已测试)
- js中回车事件的捕捉
- js“DOM事件”之鼠标事件、js的测试方法、js代码的放置位置
- js怎么捕捉网页的刷新事件,捕捉页面所有可以关闭窗口的事件
- JS 区域外事件捕捉setCapture
- js 捕捉事件和事件源:ev = ev || window.event 和 e.target VS e.srcElement
- js中的事件捕捉模型与冒泡模型实例分析
- js事件测试
- .net,js捕捉文本框回车键事件的小例子(兼容多浏览器)
- .net,js捕捉文本框回车键事件的小例子(兼容多浏览器)
- js捕捉键盘事件和按键键值
- js捕捉键盘事件例子
- js捕捉键盘事件和按键键值的方法
- js中的事件捕捉模型与冒泡模型实例分析
- js捕捉IE窗口失去焦点事件,判断离开页面刷新或关闭的方法
- JS中事件流测试
- 页面进入和离开或重定向的JS事件捕捉