设为首页 加入收藏

TOP

JavaScript之事件处理详解(三)
2015-11-10 13:44:54 来源: 作者: 【 】 浏览:9
Tags:JavaScript 事件 处理 详解
果一:



从结果可以看出:


①第一种方法事件处理程序中this指向这个元素本身;


实例二:





? ?
? ? test
? ?


? ?

div1

? ? <script type="text/java script">
? ? ? ? var div1 = document.getElementById('div1');
? ? ? ? div1.onclick = function(){
? ? ? ? ? ? console.log('div1.onclick:');
? ? ? ? ? ? console.log(this);
? ? ? ? };
? ?


结果二:



从结果可以看出:


①第二种方法事件处理程序中this也指向这个元素本身;


②存在第二种方法时,它会覆盖第一种方法注册的事件处理程序;


实例三:





? ?
? ? test
? ?


? ?

div1

? ? <script type="text/java script">
? ? ? ? var div1 = document.getElementById('div1');
? ? ? ? div1.onclick = function(){
? ? ? ? ? ? console.log('div1.onclick:');
? ? ? ? ? ? console.log(this);
? ? ? ? };
? ? ? ? div1.addEventListener('click', function(){
? ? ? ? ? ? console.log('div1.addEventListener:');
? ? ? ? ? ? console.log(this);
? ? ? ? }, false);
? ?


结果三:



从结果可以看出:


①第三种方法事件处理程序中this也指向这个元素本身;


②第三种方法并不会覆盖第一种或第二种方法注册的事件处理程序;


实例四:





? ?
? ? test
? ?


? ?

div1

? ? <script type="text/java script">
? ? ? ? var div1 = document.getElementById('div1');
? ? ? ? div1.onclick = function(){
? ? ? ? ? ? console.log('div1.onclick:');
? ? ? ? ? ? console.log(this);
? ? ? ? };
? ? ? ? div1.attachEvent('onclick', function(){
? ? ? ? ? ? console.log('div1.attachEvent:');
? ? ? ? ? ? console.log(this === window);
? ? ? ? });
? ? ? ?
? ?


结果四:



从结果可以看出:


①第四种方法事件处理程序中this指向全局对象Window;


②第四种方法也不会覆盖第一种或第二种方法注册的事件处理程序;


3.事件处理程序的调用顺序:多个事件处理程序调用规则如下:


①通过HTML属性注册的处理程序和通过设置对象属性的处理程序一直优先调用;


②使用addEventListener()注册的处理程序按照它们的注册顺序依次调用;


③使用attachEvent()注册的处理程序可能按照任何顺序调用,所以代码不应该依赖于调用顺序;


4.事件取消:


①取消事件的浏览器默认操作(比如点击超链接元素会自动发生页面跳转的默认操作):如果使用前两种方法注册事件处理程序,可以在处理程序中添加返回值false来取消事件的浏览器默认操作。在支持addEventListener()的浏览器中,也可以通过调用事件对象的preventDefault()方法取消事件的默认操作。至于IE8及其之前的浏览器可以通过设置事件对象的returnValue属性为false来取消事件的默认操作。参考代码:


function cancelHandler(event){
? ? var event = event || window.event;
? ? if(event.preventDefault){
? ? ? ? event.preventDefault();
? ? }
? ? if(event.returnValue){
? ? ? ? event.returnValue = false;
? ? }
? ? return false;
}


②取消事件传播:在支持addEventListener()的浏览器中,可以调用事件对象的一个stopPropagation()方法阻止事件的继续传播,它能工作在事件传播期间的任何阶段(捕获期阶段、事件目标本身、冒泡阶段);但是在IE8以及其之前版本的浏览器中并不支持stopPropagation()方法,而且这些浏览器也不支持事件传播的捕获阶段,相应的,IE事件对象有一个cancelBubble属性,设置这个属性为true能阻止事件进一步传播(即阻止其冒泡)。参考代码(阻止发生在div3区域的点击事件冒泡到div2和div1):





? ?
? ? test
? ?


? ?

div1
? ? ? ?
div2
? ? ? ? ? ?
div3
? ? ? ? ? ?

? ? ? ?

? ?

? ? <script type="text/java script">
? ? ? ? var div1 = document.getElementById('div1');
? ? ? ? var div2 = document.getElementById('div2');
? ? ? ? var div3 = document.getElementById('div3');
? ?    div1.onclick = function(){
? ? ? ? ? ? console.log('div1');
? ?    };
? ?    div2.onclick = function(){
? ? ? ? ? ? console.log('div2');
? ?    };
? ?    div3.onclick = function(event){
? ? ? ? ? ? stopEventPropagation(event);
? ? ? ? ? ? console.log('div3');
? ?    };
? ?
? ? ? ? function stopEventPropagation(event){
? ? ? ? ? ? var event = event || window.event;
? ? ? ? ? ? if(event.stopPropagation){
? ? ? ? ? ? ? ? event.stopPropagation();
? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? event.cancelBubble = true;
? ? ? ? ? ? }
? ? ? ? }
? ?


首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Vim 创建Python脚本时候自动补全.. 下一篇一份简单的在Linux下编译及调试C..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: