簡體   English   中英

jQuery-“觸發點擊”與“函數調用”?

[英]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 objectevent 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM