`
zccst
  • 浏览: 3322385 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[Event]事件(高程版)(三)事件对象

阅读更多
作者:zccst

1,DOM中的事件对象
2,IE事件对象
3,兼容各浏览器的事件对象


<script type="text/javascript">  
window.onload=function(){
function G(id){  
	return document.getElementById(id);      
}
/*---------------------------------------------------------------------------
1,DOM中的事件对象(IE8及以前不支持)
bubbles 表面事件是否冒泡,如果为true,则可以stopPropagation() 取消进一步捕获活冒泡
cancelable 是否可以取消默认行为,如果为true,则可以preventDefault()取消事件默认行为
type
target
currentTarget
eventPhase  1表示捕获阶段,2表示目标阶段,3表示冒泡阶段
*/

/*
(1)target与currentTarget区别
*/
	//target与currentTarget区别
    function addEvent(obj, ev, handler){  
        if(window.attachEvent){  
            obj.attachEvent("on" + ev, handler);  
        }else if(window.addEventListener){   
            obj.addEventListener(ev, handler, false);  
        }  
    }
    function test(e){  
        alert("e.target.tagName : " + e.target.tagName + "\n e.currentTarget.tagName : " + e.currentTarget.tagName);  
    }  
    var outer = G("outer");  
    var inner = G("inner");  
    //addEvent(inner, "click", test);  
    addEvent(outer, "click", test);  


/*
(2)阻止特定事件的默认行为 preventDefault()
比如,链接的默认行为就是在被单击时会导航到href特性指定的URL。阻止方法:
*/
var link = G("myLink");
link.onclick = function(event){
	event.preventDefault();//IE8及以前不支持
};
//当然,cancelable为true的事件,才能使用preventDefault()方法

/*
(3)stopPropagation()用于立即停止DOM层次中的传播,取消进一步的事件捕获活冒泡。
例如,直接添加到一个按钮的事件处理程序可以调用stopPropagation(),从而避免触发注册在document.body上面的事件处理程序:
*/
var btn1 = G("btn1");
btn1.onclick=function(e){
	alert("Button Clicked");
	e.stopPropagation();//注释的话,会继续弹出"body Clicked"。IE8及以前不支持
}
document.body.onclick=function(e){
	alert("body Clicked");
}

/*
(4)eventPhase表示事件当前正处在事件流的哪个阶段
*/
var btn1 = G("btn2");
btn2.onclick=function(e){
	alert(e.eventPhase);//2
}
btn2.addEventListener("click",function(e){
	alert(e.eventPhase);//2
},true);
document.body.addEventListener("click",function(e){
	alert(e.eventPhase);//1
},true);
document.body.onclick=function(e){
	alert(e.eventPhase);//3
}
//打印结果:1,2,2,3
//结论:点击按钮的时候,body最先感知,其次是button,最后又冒泡到body


/*---------------------------------------------------------------------------
2,IE中的事件对象
cancelBubble 默认false,如果为true,则可以取消进一步捕获活冒泡,类似stopPropagation() 
returnValue 默认true,如果false,则可以取消事件默认行为,类似preventDefault()
srcElement 事件的模板,类似target
type 事件类型
*/
/*
(1)this, event.srcElement的区别
由于this未必始终等于事件目标,所以最好还是使用event.srcElement比较保险,例如:
*/
var btn1 = G("btn1");
btn1.onclick=function(){
	alert(window.event.srcElement);
	alert(window.event.srcElement == this); //true
};
btn1.onclick=function(e){//如果直接这么写,会覆盖掉上一个onclick赋值
	alert(e.srcElement);
	alert(e.srcElement == this); //true
};
btn1.attachEvent("onclick",function(e){
	//attachEvent中this是window
	alert(event.srcElement == this); //false
});
/*
小疑问:window.event是一个全局对象,怎么跟this相等?
后来发现window.event就是当前对象,事件函数里的window.event.srcElement都不一样,都是当前点事件对象。测试如下:
*/
var btn1 = G("btn1");
btn1.onclick=function(){
	alert(window.event.srcElement);
	alert(window.event.srcElement == this); //true
};

var btn2 = G("btn2");
btn2.onclick=function(){
	alert(window.event.srcElement);
	alert(window.event.srcElement == this); //true
};

/*
(2)returnValue=false阻止特定事件的默认行为,相当于preventDefault()
比如,链接的默认行为就是在被单击时会导航到href特性指定的URL。阻止方法:
*/
var link = G("myLink");
link.onclick = function(event){
	window.event.returnValue = false;//event.preventDefault();
};

/*
(3)cancelBubble=true停止DOM层次中的传播,取消进一步的事件捕获活冒泡,相当于 stopPropagation()。*/
var btn1 = G("btn1");
btn1.onclick=function(e){
	alert("Button Clicked");
	window.event.cancelBubble = true;//e.stopPropagation();
	//e.cancelBubble = true;//写法2
}
document.body.onclick=function(e){
	alert("body Clicked");
}


/*---------------------------------------------------------------------------
3,跨浏览器的事件对象
*/
var EventUtil = {
	//一个场地(最大)-开垦
	addHandler:function(element,type,handler){
		if(element.addEventListener){
			element.addEventListener(type, handler, false);
		}else if(element.attachEvent){
			element.attachEvent("on"+type, handler);
		}else{
			element["on"+type] = handler;
		}
	},
	//一个场地(最大)-废弃
	removeHandler:function(element,type,handler){
		if(element.removeEventListener){
			element.removeEventListener(type, handler, false);
		}else if(element.detachEvent){
			element.detachEvent("on"+type, handler);
		}else{
			element["on"+type] = null;//置空
		}
	},
	//一个入口-入场
	getEvent:function(event){
		return event || window.event;
	},
	/*一个核心-进去的那个人*/
	getTarget:function(event){
		return event.target || event.srcElement;
	},
	/*两个门卫,preventDefault是前门,stopPropagation是后门*/
	//preventDefault(),操作前:阻止默认事件
	preventDefault:function(event){
		if(event.preventDefault){
			event.preventDefault();
		}else{
			event.returnValue = false;
		}
	},
	//stopPropagation(),完事后:阻止冒泡
	stopPropagation:function(event){
		if(event.stopPropagation){
			event.stopPropagation();
		}else{
			event.cancelBubble = true;
		}
	}
};


//来实战一把
//(1)EventUtil.getEvent(e)
btn.onclick = function(e){
	var e = EventUtil.getEvent(e);//第一行
}

//(2)EventUtil.getTarget(e)
var btn1 = G("btn1");
btn1.onclick = function(e){
	var e = EventUtil.getEvent(e);
	var target = EventUtil.getTarget(e);//target就是当前元素
}

//(3)EventUtil.preventDefault(e)
var link = G("myLink");  
link.onclick = function(e){
	var e = EventUtil.getEvent(e);
	EventUtil.preventDefault(e);//阻止了默认事件
}

//(4)EventUtil.stopPropagation(e)
var btn1 = G("btn1"); 
btn1.onclick=function(e){
	var e = EventUtil.getEvent(e);
	EventUtil.stopPropagation(e);//阻止了冒泡
}
document.body.onclick=function(e){  
    alert("body Clicked");  
}  




}
</script>
</head>
<body>

<div id="outer" style="background:#099">  
	click outer  
	<p id="inner" style="background:#9C0">click inner</p>  
	<br>  
</div>  

<a href="www.sogou.com" id="myLink">搜狗<a>
<input type="button" id="btn1" value="我是按钮1" />
<input type="button" id="btn2" value="我是按钮2" />




如果您觉得本文的内容对您的学习有所帮助,您可以微信:
分享到:
评论

相关推荐

    《javascript》——event对象与事件

    《JavaScript》——Event 对象与事件 Event 对象是 JavaScript 中的一个基本概念,它代表了用户与 Web 页面的交互行为,例如点击、鼠标移动、键盘输入等。Event 对象的属性和方法可以帮助开发者更好地处理用户的...

    Javascript中的事件--Event对象

    在IE中,事件对象通常通过`window.event`获取,而不是作为事件处理器的第一个参数。此外,IE使用`srcElement`属性代替`target`,并且不支持`eventPhase`、`preventDefault()`和`stopPropagation()`等现代事件处理...

    Event事件总汇资源下载 event事件大全!请支持啊

    这些动作由操作系统或用户界面框架捕获并转换为事件对象,然后通过事件监听器(Event Listener)分发给相应的处理函数进行响应。事件驱动编程使得代码更加模块化,提高了程序的可维护性和灵活性。 在JavaScript中,...

    易语言利用Event事件实现多线程暂停继续源码

    事件对象`是Event事件对象。`线程执行代码`是线程运行时执行的代码段,其中应包含对`.事件对象`的等待操作,如`.事件对象.等待()`。 在易语言的“线程”类中,还提供了其他的同步和通信机制,如“信号量”...

    window对象--event对象详解

    Event对象则是JavaScript事件处理中的核心,它包含了与特定事件相关的所有信息,如事件类型、事件目标等。 在深入讲解Window对象和Event对象之前,我们先了解一些基础概念。JavaScript是一种基于原型的动态类型语言...

    jQuery源码分析之Event事件分析

    对于事件的操作无非是addEvent,fireEvent,removeEvent这三个事 件方法。一般lib都会对浏览器的提供的函数做一些扩展,解决兼容性内存泄漏等问题。第三个问题就是如何得到domReady的状态。 6.1 event的包裹 浏览器的...

    window.event 对象详解

    在JavaScript编程语言中,`window.event`对象是一个特殊对象,它与浏览器的事件处理机制紧密相关。这个对象在大部分浏览器环境中(尤其是老版本的IE)是全局可用的,提供了当前事件的相关信息。本文将深入探讨`...

    C#事件(event)使用方法详解

    事件(event)是C#中的一种机制,允许对象在发生某些情况时通知其他对象。事件(event)使用方法详解将从概念、使用方法、事件编程的优点、事件与委托的关系、事件的实现等方面进行讲解。 事件(event)的概念: 事件...

    C++事件(event)

    - 当创建具有相同名称的事件时,需要确保系统中不存在同名的事件对象,否则`CreateEvent`函数将返回错误代码`ERROR_ALREADY_EXISTS`。 - 在使用事件对象时,需要确保正确地释放资源,避免内存泄漏等问题。 - 使用...

    VB Event 事件演示程序

    本项目“VB Event 事件演示程序”是专门针对VB中的事件处理机制进行的一个实例展示,旨在帮助开发者理解如何利用事件来简化编程流程。 在VB中,事件是对象对外部动作或状态变化的响应。例如,当用户点击按钮、关闭...

    event对象总结,更详细更全面

    JavaScript 事件对象总结 事件对象概述 JavaScript 事件对象是指在用户与浏览器交互时触发的事件,例如点击、键盘输入、鼠标移动等。事件对象是一种特殊的对象,它包含了事件的详细信息,例如事件类型、事件目标、...

    js-event事件

    例如,Internet Explorer 使用`window.event`来访问当前事件,而其他浏览器则直接通过事件处理器函数的第一个参数来访问事件对象。为了确保代码的兼容性,可以使用条件语句来区分处理。 #### 五、事件委托 事件委托...

    event 发送事件 事件管理

    event 事件机制, 游戏或者各种操作行为的事件。

    mouse_event事件

    ### mouse_event事件详解 在计算机编程领域,尤其是前端开发与动画设计中,`mouse_event`事件扮演着至关重要的角色,它们允许开发者响应用户的鼠标操作,从而实现动态且交互丰富的用户体验。本文将深入探讨`mouse_...

    C#写入事件查看器、eventLog控件使用DEMO

    在Windows操作系统中,事件查看器(Event Viewer)是一个强大的工具,用于查看系统、应用程序和安全日志中的事件。开发者可以通过编程方式将应用日志写入事件查看器,以供后期分析和故障排查。C#提供了方便的API来...

    Event 对象的使用方法

    Event对象在Web开发中扮演着至关重要的角色,它代表了一个事件的状态,包含了关于事件发生时的各种详细信息。例如,事件发生在哪个元素上、哪个键盘键被按下、鼠标的当前位置以及鼠标按钮的状态等。Event对象经常与...

    JS的Event事件对象使用方法

    在JavaScript中,Event事件对象是处理用户交互和浏览器行为的核心组成部分。它包含了与特定事件相关的所有信息,如鼠标点击、键盘按键或者页面加载等。理解并熟练使用Event对象是每个前端开发者必备的技能之一。本篇...

    [JS]详尽解析window.event对象

    `window.event`对象是JavaScript中一个非常重要的概念,特别是在处理DOM事件时。它代表了当前事件的状态和相关信息,包括触发事件的元素、鼠标位置、按键状态等。在事件发生时,`event`对象会作为参数传递给事件处理...

    event事件的使用及说明

    【事件(event)】在Web开发中,事件是用户与网页交互的关键部分,它允许JavaScript响应用户的操作,如点击按钮...理解并熟练运用Event对象及其属性、事件句柄以及事件处理模型,是成为一名合格的前端开发者必备的技能。

Global site tag (gtag.js) - Google Analytics