jQuery事件的绑定、触发、及监听方法简单说明
如果你在写文章或者Demo,为了简单,你当然可以用事件监听函数,以及那些事件对象提供的方法等。但在实际中,有一些方法和属性是有兼容性问题的,所以我们会使用jQuery来消除兼容性问题。
下面简单的来说一下jQuery中事件的基础操作。
绑定事件和事件代理
在jQuery中,提供了诸如click()这样的语法糖来绑定对应事件,但是这里推荐统一使用on()来绑定事件。语法:
.on(events[,selector][,data],handler)
events即为事件的名称,你可以传递第二个参数来实现事件代理,具体文档.on()这里不再赘述。
处理过兼容性的事件对象(EventObject)
事件对象有些方法等也有兼容性差异,jQuery将其封装处理,并提供跟标准一直的命名。
如果你想在jQuery事件回调函数中访问原来的事件对象,需要使用event.originalEvent,它指向原生的事件对象。
触发事件trigger方法
点击某个绑定了click事件的节点,自然会触发该节点的click事件,从而执行对应回调函数。
trigger方法可以模拟触发事件,我们单击另一个节点elementB,可以使用:
$(elementB).on('click',function(){
$(elementA).trigger("click");
});
事件监听
jQuery中的事件监听,完全可以用addEventListener/attachEvent模拟,分别对应于现代浏览器和IE,可以把两个方法封装一下,但是为了方便,这里把其他事件相关处理,如移除事件监听、阻止默认事件等方法统一写在一个对象中,方便调用,具体代码如下:
//事件处理对象
varEventUtil={
//添加事件监听
add:function(element,type,callback){
if(element.addEventListener){
element.addEventListener(type,callback,false);
}elseif(element.attachEvent){
element.attachEvent('on'+type,callback);
}else{
element['on'+type]=callback;
}
},
//移除事件监听
remove:function(element,type,callback){
if(element.removeEventListener){
element.removeEventListener(type,callback,false);
}elseif(element.detachEvent){
element.detachEvent('on'+type,callback);
}else{
element['on'+type]=null;
}
},
//跨浏览器获取event对象
getEvent:function(event){
returnevent?event:window.event;
},
//跨浏览器获取target属性
getTarget:function(event){
returnevent.target||event.srcElement;
},
//阻止事件的默认行为
preventDefault:function(event){
if(event.preventDefault){
event.preventDefault();
}else{
event.returnValue=false;
}
},
//阻止事件流或使用cancelBubble
stopPropagation:function(){
if(event.stopPropagation){
event.stopPropagation();
}else{
event.cancelBubble=true;
}
}
};
//使用例子
varat=document.getElementbyId('atemp');
EventUtil.add(at,'click',function(){
console.log('被点击了');
event=EventUtil.getEvent(event);//跨浏览器获取event对象
EventUtil.preventDefault(event);//阻止默认事件
});