javascript基础三 (EVENT事件详解)

一:基础概念

event:事件对象:当一个事件发生的时候和当前这个对象发生的这个事件有关的一些详细的信息都会被临时保存到一个指定地方-event对象,供需要的时候调用

事件对象必须在一个事件调用的函数里面才有内容

事件函数:事件调用的函数,一个函数是不是事件函数,不在定义的时候决定,而是取决去于个函数调用的时候

二:兼容

ie/chrome :event是一个内置的全局对象
firefox  :事件对象是通过事件函数的第一个参数传入

function fn(ev){
var ev = ev || event;
alert(ev);
}

三:事件冒泡

事件冒泡:当一个元素接收到一个事件的时候,会把它接收到的所有事件传播给父级,直到顶层window

阻止冒牌: 当前要阻止冒泡的事件函数中调用 event.cancleBubble = true

function(ev){
var ev = ev || event;
ev.cancleBubble = true;
}

四:事件 绑定

1:事件绑定的第一种方式:赋值形式

obj.onclick = fn;
obj.onclick = fn2; //会覆盖前面绑定的fn 
function fn(){
alert(1);
}
function fn2(){
alert(2);
}

2:事件绑定的第二种方式:给一个对象绑定多个函数

ie:obj.attachEvent('事件名称','事件函数');
1:没有捕获
2:事件名称有on
3:事件函数执行的顺序正序:标准ie顺序执行 非标准ie倒序执行
4:this指向window

document.attachEvent('onclick',fn);

标准:obj.addEventListener('事件名称','事件函数','是否捕获');
1:有捕获
2:事件名称没有on
3:事件执行正序
4:this:触发事件的对象

document.addEventListenrt('click',fn,false) false :是否捕获 默认


解决事件绑定中this指向问题

call 函数下的一个方法,call方法第一个参数可以改变函数执行过程中的内部this的指向
call方法第二个参数就是原函数的参数
 

/例一
function fn(){
    alert(this)
}
fn.call() //调用函数 
fn() == fn.call();

fn.call(null,arguments1,arguments2);  //如果第一个参数为空则不改变函数内部指向

处理事件绑定兼容方法

function bind(obj,evname,fn){
    if(obj.addEventListener){
       obj.addEventListener(evname,fn,false);
    }else{
       obj.attachEvent('on'+evname,function(){
       fn.call(obj);
      })
    }
}

五:取消事件

ie:obj.detachEvent("事件名称","事件函数");

标准: obj.removeEventListener('事件名称','事件函数','是否捕获');

六:键盘事件

onkeydown

onkeyup

oncontextmenu

event.keyCode :数字类型 键盘案件的值

ctrlKey,shiftKey,altKey当一个事件发生的时候,如果ctrl,shift,alt是按下的状态返回 true 否则返回false


七:事件委托

/**
 *事件委托:事件代理,利用冒泡原理,触发执行效果
 *1:提高性能
 *2:新添加的元素也有事件
 * nodeName 
 * 捕捉事件源;返回事件的目标节点
 * ie :window.event.srcElement
 * 标准下:event.target
 */

var oUl = document.getElementById("ul");
oUl.onmouseover = function(ev){
	// alert(1);
	var ev = ev || event;
	var target = ev.target || ev.srcElement;
	if(target.nodeName.toLowerCase() == 'li'){
		target.style.background = 'red';
	}
}

oUl.onmouseout = function(ev){
	// alert(1);
	var ev = ev || event;
	var target = ev.target || ev.srcElement;
	if(target.nodeName.toLowerCase() == 'li'){
		target.style.background = '';
	}
}



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值