1jQuery自定義事件之trigger事件
眾所周知類似於mousedown、click、keydown等等這類型的事件都是瀏覽器提供的,通俗叫原生事件,這類型的事件是需要有交互行為才能被觸發。
在jQuery通過on方法綁定一個原生事件
$('#elem').on('click', function() { alert("觸發系統事件") });
alert需要執行的條件:必須有用戶點擊才可以。如果不同用戶交互是否能在某一時刻自動觸發該事件呢? 正常來說是不可以的,但是jQuery解決了這個問題,提供了一個trigger方法來觸發瀏覽器事件
所以我們可以這樣:
$('#elem').trigger('click');
在綁定on的事件元素上,通過trigger方法就可以調用到alert了,挺簡單!
再來看看.trigger是什么?
簡單來講就是:根據綁定到匹配元素的給定的事件類型執行所有的處理程序和行為
trigger除了能夠觸發瀏覽器事件,同時還支持自定義事件,並且自定義時間還支持傳遞參數
$('#elem').on('Aaron', function(event,arg1,arg2) { alert("自觸自定義時間") }); $('#elem').trigger('Aaron',['參數1','參數2'])
trigger觸發瀏覽器事件與自定義事件區別?
- 自定義事件對象,是jQuery模擬原生實現的
- 自定義事件可以傳遞參數
2jQuery自定義事件之triggerHandler事件
trigger事件還有一個特性:會在DOM樹上冒泡,所以如果要阻止冒泡就需要在事件處理程序中返回false或調用事件對象中的.stopPropagation() 方法可以使事件停止冒泡
trigger事件是具有觸發原生與自定義能力的,但是存在一個不可避免的問題: 事件對象event無法完美的實現,畢竟一個是瀏覽器給的,一個是自己模擬的。盡管 .trigger() 模擬事件對象,但是它並沒有完美的復制自然發生的事件,若要觸發通過 jQuery 綁定的事件處理函數,而不觸發原生的事件,使用.triggerHandler() 來代替
triggerHandler與trigger的用法是一樣的,重點看不同之處:
- triggerHandler不會觸發瀏覽器的默認行為,.triggerHandler( "submit" )將不會調用表單上的.submit()
- .trigger() 會影響所有與 jQuery 對象相匹配的元素,而 .triggerHandler() 僅影響第一個匹配到的元素
- 使用 .triggerHandler() 觸發的事件,並不會在 DOM 樹中向上冒泡。 如果它們不是由目標元素直接觸發的,那么它就不會進行任何處理
- 與普通的方法返回 jQuery 對象(這樣就能夠使用鏈式用法)相反,.triggerHandler() 返回最后一個處理的事件的返回值。如果沒有觸發任何事件,會返回 undefined