通用triggerEvent方法

2022-08-14 19:30:13 字數 1482 閱讀 6145

假設有乙個id為testa的a元素,然後有以下**(jquery已存在):

$(document).ready(function());

var ba = document.getelementbyid('testa');

ba.addeventlistener('testevent', function(e));

});

即,用兩種方法監聽乙個自定義事件:testevent,再看看如何觸發testevent事件:

document.addeventlistener('click', function(e));

實際上只有用on監聽的才能起作用,就是說用jquery的方法trigger來發事件,就只能用jquery的方法on[或者其他.click(handler)之類的]來監聽事件,而用js原生的addeventlistener方法是不行的。

為解決上面的問題,我們可以這樣:

var evt = new event('testevent');

var ba = document.getelementbyid('testa');

ba.dispatchevent(evt);

如果要帶上自定義資料,可以這樣:

var evt = new customevent('testevent',);

var ba = document.getelementbyid('testa');

ba.dispatchevent(evt);

然後在事件處理函式中,可以通過event.detail來訪問需要的資料,但event物件裡面沒有a,b屬性,此處不清楚內部原因,是不是只有乙個detail屬性可用也不得而知。更多的說明可以看這裡:

上面的方法在firefox,chrome上可行,但ie8及以下版本瀏覽器不可行,下面來處理ie的問題。

ie8發事件函式用的是fireevent,建立事件物件用的是document.createeventobject(),看下面的**:

var evt = document.createeventobject();

evt.x = 100;

evt.y = 200;

evt.button = 1;

evt.z = 34;

ba.fireevent('onclick', evt);

注意,我把testevent換成了onclick,因為ie8不支援自定義事件。

接下來實現通用的發事件方法,如果要相容ie8,那麼就不能傳送自定義事件:

function triggerevent(element,eventtype)else if(element.fireevent)else if(element['on'+eventtype])

}

上面的方法,如果在ie8及以下版本中執行是無法傳送自定義事件的。如果允許用jquery的trigger方法,還是用jquery比較方便。

TriggerEvent函式的解釋

函式作用 觸發指定物件的指定事件,並且立即執行該事件中的指令碼。注意該函式和postevent的區別。postevent不是立即執行,triggerevent是立即執行觸發事件的指令碼。函式語法 objectname.triggerevent event lobjectname pb中任何物件或者控...

PB中TriggerEvent用法詳解

triggerevent 函式作用 觸發指定物件的指定事件,並且立即執行該事件中的指令碼。注意該函式和postevent的區別。postevent不是立即執行,triggerevent是立即執行觸發事件的指令碼。函式語法 objectname.triggerevent event z objectn...

079 方法的通用格式

格式 public static 返回值型別 方法名 引數 方法體 return資料 1.public state 修飾符,目前先記住這個格式 2.返回值型別 方法操作完畢之後返回的資料的資料型別 如果方法操作完畢,沒有資料返回,這裡寫void,而且方法體中一般不寫return 3.方法名 呼叫方法...