2010-09-23 50 views
0

說當複選框被選中/取消選中時,我想要發生特定行爲。是否可以封裝事件邏輯以避免重複的代碼?

現在,如果在我的代碼中有多個點,我將複選框設置爲選中/取消選中,我必須在任何時候運行相同的邏輯。

什麼是我可以封裝檢查複選框時發生的邏輯並重新使用該邏輯的方法?

回答

5

我的猜測是,你目前正在結合的Click事件處理程序是這樣的:

$('some-selector').click(function (event) 
{ 
    // do fancy stuff here 
}); 

來封裝邏輯,你只需要使用一個匿名函數切換,可以重複使用的功能,像這樣:

function handleClicks(event) 
{ 
    // do fancy stuff here 
} 

$('some-selector').click(handleClicks); 
$('some-other-selector').click(handleClicks); 

那是怎麼回事?


我也可以以此來猜測的邏輯你寫和重寫就是連接一個「檢查所有」之類的複選框一組複選框的事實。我最近編寫了一個jQuery插件來處理這類事情。

我從來沒有想過將它正確上傳到GitHub - here's the gist它。讓我知道你是否想實際使用它,並且我可以解釋它的用法 - 這很簡單。

+0

好猜!! – Blankman 2010-09-23 14:46:44

+0

@Blankman:需要插件的解釋嗎? – 2010-09-23 14:57:27

0

只是延長了什麼「熊會吃了你」說,關於使用非匿名的功能,你都應該自己的函數庫,以便集成到jQuery的:

像這樣

$.fn.handleClicks = function(){ 
    $(this).click(function(event){ 
     alert('Click'); 
     return false 
    }) 
} 

然後創建你的函數你可以像這樣使用它們,讓事情變得更整潔,代碼更少一些。 IMO;

$('a').handleClicks(); ​ 
+0

-1您不應該將自己的應用程序特定代碼添加到jQuery對象。它還有一個缺點,那就是每次添加處理程序時都會重新創建該函數。 jQuery插件中的'this'指的是一個jQuery對象,因此您不需要執行'$(this)'。 – Dennis 2012-01-29 19:28:23