事件触发器就是用来触发某个元素下的某个事件,IE下fireEvent方法,高级浏览器(chrome,firefox等)有dispatchEvent方法。
一般我们在元素上绑定事件后,是靠用户在这些元素上的鼠标行为来捕获或者触发事件的,或者自带的浏览器行为事件,比如click,mouseover,load等等,有些时候我们需要自定义事件或者在特定的情况下需要触发这些事件。这个时候我们可以使用IE下fireEvent方法,高级浏览器(chrome,firefox等)有dispatchEvent方法。
例如在ie下看看这个例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | document.attachEvent( 'ondataavailable' , function (event) {
alert(event.eventType);
});
var obj=document.getElementById( "obj" );
obj.attachEvent( 'onclick' , function (event) {
alert(event.eventType);
});
var event = document.createEventObject();
event.eventType = 'message' ;
document.fireEvent( 'ondataavailable' , event);
document.getElementById( "test" ).onclick = function () {
obj.fireEvent( 'onclick' , event);
};
|
再看看高级浏览器(chrome,firefox等)的例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | document.addEventListener( 'ondataavailable' , function (event) {
alert(event.eventType);
}, false );
var obj = document.getElementById( "obj" );
obj.addEventListener( 'click' , function (event) {
alert(event.eventType);
}, false );
var event = document.createEvent( 'HTMLEvents' );
event.initEvent( "ondataavailable" , true , true );
event.eventType = 'message' ;
document.dispatchEvent(event);
var event1 = document.createEvent( 'HTMLEvents' );
event1.initEvent( "click" , true , true );
event1.eventType = 'message' ;
document.getElementById( "test" ).onclick = function () {
obj.dispatchEvent(event1);
};
|
在实际封装中没这么简单,看了一下jQuery.event.trigger的源码,是通过模拟来实现了,给某元素绑定一个事件处理函数,如果有触发事件的实际操作就会执行相应的事件处理函数,所以要达到事件触发器的功能只要获取到相应的事件处理函数然后执行。