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);//阻止默认事件 });