[英]jQuery - “Trigger a click” vs “Function call”?
假設我有一些綁定到鏈接的動作(使用.click或.live),我想稍后再做同樣的事情,但是我不想重復的代碼。 哪種方法正確,為什么?
這個:
$('#link').click(function(){
//do stuff
});
//called later
$('#link').trigger('click');
要么:
$('#link').click(function(){
do_stuff();
});
//called later
do_stuff();
//defined here
function do_stuff(){
//do stuff
}
實際上,您只需要區分是否在事件處理程序中訪問event object
。 另一個區別是該被調用處理程序的上下文可能會更改,因此當直接調用該node
時, this
不會指向被調用node
。
如果要訪問this
event object
或event object
,則確實應該使用.trigger
執行處理程序。 您也可以通過手動調用該方法來自己傳遞所有necesarry數據,但是為什么要發明輪子呢?
否則,您可以在任何有訪問權限的地方直接調用該函數。
請注意,根據這兩個操作,上下文在您的代碼中將有所不同。
在您的匿名回調函數中, this
將指向被單擊的鏈接。 在do_stuff
不會。
除此之外,我認為調用一個可以執行您想要的功能的函數在語義上通常比模擬具有觸發您的偵聽器的副作用的單擊更具吸引力。 不過,這是我的個人喜好。
第一種方法的一個問題是,您還將觸發綁定到該控件的任何其他click事件。 您可以使用名稱空間解決此問題
$('#link').bind('click.mynamespace', function(){ ... });
$('#link').trigger('click.mynamespace');
或通過使用第二個事件
$('#link').bind('do_stuff', function(){ ... });
$('#link').click(function() { $(this).trigger('do_stuff'); });
但是,我將繼續第二個,因為它比較簡單,只要您可以在需要調用該函數的地方進行關閉訪問即可。 您不需要額外的功能包裝器BTW:
function do_stuff(event) { ... }
$('#link').click(do_stuff);
do_stuff();
如果在不再有權限訪問的閉包中定義函數很有用,請采用第一種方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.