2012-07-10 35 views
6

我發現自己經常需要綁定一個事件處理程序,並且立即在jQuery中執行該處理程序。到今天爲止,我一直在使用這種懶惰的人造格局保持代碼的DRY:jQuery - 綁定並執行一個處理程序?

$(...).bind('event', function() { 
    ... 
}).trigger('event'); 

今天,我被這咬傷,由於其他處理程序已經被綁定到event的事實,他們是當我以這種方式觸發事件時也會執行,但是會造成很多問題,因爲當時它們不應該被執行。

要解決這個問題,我已經改變了模式,以這樣的:

var handler = function() { 
    ... 
}; 

var element = $(...); 

element.bind('event', handler); 
handler.call(element); 

這工作我所期望的方式,但它的醜陋罪和相當冗長,所以我考慮封裝這種模式成jQuery插件:

$(...).bindAndExecute('event', function() { ... }); 

我能找到jQuery.bind()期權或任何其他方法沒有類似這一點,但我可能錯過了一些東西。有沒有更簡潔的做法,我沒有想到?我不想重新發明輪子。

回答

3

jQuery支持namespacing your events。這是一種非常有用的技術,當您想要解除綁定或觸發特定的一組事件時非常有用。

$(...).bind('event.myNamespace', function() { 
    ... 
}).trigger('event.myNamespace'); 

使用這種技術幾乎是不可避免的(或至少是明智的人不會迴避它)當你正在開發更大的應用程序或jQuery插件。

Quick jsFiddle Demo

+0

我不明白這個建議。你能解釋一下嗎? – FtDRbwLXw6 2012-07-10 19:57:30

+0

我沒有使用自定義事件,所以我不確定這是如何適用於我的情況。謝謝你盡你所能的幫助。 – FtDRbwLXw6 2012-07-10 19:58:55

+0

@drrcknlsn,你也可以命名空間「標準」事件。 – 2012-07-10 19:59:26

相關問題