JavaScript事件来源元素
有些时候我们需要知道是哪个元素触发了某个事件,我们可以事件响应函数中获得这个元素。但是在不同的浏览器中我们需要使用不同的方法来获得这个来源元素。假设evt为事件对象:W3C标准中,使用evt.target,而IE为evt.srcElement。所以我们可以用如下代码来跨浏览器地获得事件的来源元素:
function clickFunc(e){
var evt = e || window.event;
var eventSrc = evt.target||evt.srcElement;
}
注意:时间响应函数中的this返回的是定义事件响应函数的元素。我们使用如下的JavaScript代码来显示事件来源元素的信息,可以在页面下方的div内观察得到。
<script type="text/javascript">
function addEventSimple(obj,evt,fn){
if(obj.addEventListener){
obj.addEventListener(evt,fn,false);
}else if(obj.attachEvent){
obj.attachEvent('on'+evt,fn);
}
}
addEventSimple(window,'load',init);
function init(){
addEventSimple(document,'click',clickFunc);
}
function clickFunc(e){
var evt = e || window.event;
var eventSrc = evt.target||evt.srcElement;
var str = evt.type + "事件发生!";
str += "<br />事件的来源元素:" + eventSrc;
str += "<br />来源元素的nodeName:" + eventSrc.nodeName;
str += "<br />来源元素的nodeValue:" + eventSrc.nodeValue;
str += "<br />来源元素的nodeType:" + eventSrc.nodeType;
str += "<br />时间响应函数的this:" + this;
var watchScreen = document.getElementById("watchScreen");
watchScreen.innerHTML = str;
}
</script>
我是黑板。
从测试的结果可以看到,由于响应函数定义在document上,所以this一直都不会改变。而事件的来源函数却会不断地改变。之所以这个定义在document上的事件响应函数可以响应所有元素上的click事件,是因为事件是会冒泡的,会从来源元素一直逐级上升到document上。
- 用javascript修改html元素的class
- JavaScript重定向
- JavaScript对象当作关联数组
- JavaScript弹出窗口以及窗口间的通信
- JavaScript显示信息实例
- 用JavaScript批量访问HTML元素
- 分离JavaScript与HTML
- JavaScript计算器实例
- JavaScript的Math对象计算器
- JavaScript改变HTML元素的位置
- JavaScript动画
- JavaScript动画函数
- JavaScript拖拽
- JavaScript拖拽2——多元素、分离JS
- JavaScript拖拽3——解决快速拖拽的问题
- addEventSimple函数,添加事件响应函数的方法
- addEventSimple观察鼠标事件
- JavaScript click事件深入
- JavaScript事件来源元素
- JavaScript修改与访问CSS
- JavaScript拖拽4——获得元素的位置
- JavaScript拖拽5——性能优化
- DOM Scripting相册
- DOM Scripting斑马表格
- DOM Scripting动画切图
- JavaScript颜色渐变
- JavaScript拖拽6——修复错误
