1. 程式人生 > >javascript事件觸發器fireEvent和dispatchEvent

javascript事件觸發器fireEvent和dispatchEvent

轉載自:https://www.cnblogs.com/tiger95/p/6962059.html

 

javascript事件觸發器fireEvent和dispatchEvent

事件觸發器就是用來觸發某個元素下的某個事件,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上繫結自定義事件ondataavailable

document.attachEvent('ondataavailable'function (event) {

alert(event.eventType);

});

var obj=document.getElementById("obj");

//obj元素上繫結click事件

obj.attachEvent('onclick'

function (event) {

alert(event.eventType);

});

//呼叫document物件的createEventObject方法得到一個event的物件例項。

var event = document.createEventObject();

event.eventType = 'message';

//觸發document上繫結的自定義事件ondataavailable

document.fireEvent('ondataavailable', event);

//觸發obj元素上繫結click事件

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上繫結自定義事件ondataavailable

document.addEventListener('ondataavailable'function (event) {

alert(event.eventType);

}, false);

var obj = document.getElementById("obj");

//obj元素上繫結click事件

obj.addEventListener('click'function (event) {

alert(event.eventType);

}, false);

//呼叫document物件的 createEvent 方法得到一個event的物件例項。

var event = document.createEvent('HTMLEvents');

// initEvent接受3個引數:

// 事件型別,是否冒泡,是否阻止瀏覽器的預設行為

event.initEvent("ondataavailable"truetrue);

event.eventType = 'message';

//觸發document上繫結的自定義事件ondataavailable

document.dispatchEvent(event);

var event1 = document.createEvent('HTMLEvents');

event1.initEvent("click"truetrue);

event1.eventType = 'message';

//觸發obj元素上繫結click事件

document.getElementById("test").onclick = function () {

obj.dispatchEvent(event1);

};

在實際封裝中沒這麼簡單,看了一下jQuery.event.trigger的原始碼,是通過模擬來實現了,給某元素繫結一個事件處理函式,如果有觸發事件的實際操作就會執行相應的事件處理函式,所以要達到事件觸發器的功能只要獲取到相應的事件處理函式然後執行。