2012-07-09 74 views
5

這兩段代碼有什麼區別?兩者都工作得很好,爲什麼在函數中使用.dropdown.data-api?我在網上閱讀了關於命名空間的知識,但我不清楚這一點。任何人都可以告訴我什麼是名稱空間函數的使用?jQuery中的命名空間功能

$('html').on('click.dropdown.data-api', 
    function() { 
    $el.parent().removeClass('open') 
    }) 
} 

$('html').on('click', 
    function() { 
    $el.parent().removeClass('open') 
    }) 
} 
+0

+1讓我很好奇也。 – 2012-07-09 11:05:43

+0

你好艾米特我希望你是不是在談論下拉插件,其中第一個是標準的'.on'事件的http://stackoverflow.com/questions/11208483/get-error-in-event-handler-for-undefined -un-defined-in-chrome-and-dropdown -d soimething like this這個問題有一個代碼':)' – 2012-07-09 11:10:56

回答

6

命名空間事件允許您針對特定事件,如果您希望解除綁定或觸發它。

想象一下,你有一個綁定到相同的元素(S)的兩個同類事件。

$('.something').on('click', function() { /* do something */ }); 
$('.something').on('click', function() { /* do something else */ }); 

由於我們沒有命名空間無論哪種情況,現在很難解除綁定或觸發一個而不是其他。現在考慮:

$('.something').on('click.one', function() { /* do something */ }); 
$('.something').on('click.two', function() { /* do something else */ }); 

因爲這個時候每個事件都有自己的命名空間,我們現在可以觸發或者解除綁定一個或另一個,留下其他不變。

$('.something').off('click.one'); //unbind the 'one' click event 
$('.something').trigger('click.two'); //simulate the 'two' click event 

[編輯 - 如@jfrej右下方指出,命名空間意味着你有時甚至不需要引用事件類型名稱。所以,如果你有一個鼠標懸停和點擊一個單一命名空間的事件上,則您可以用off('.namespace')既解除綁定]

+0

有趣的是,我以前總是這樣做,在解綁定中指定事件方法,這看起來更容易。 – worenga 2012-07-09 11:14:52

+2

+1擊敗我。 jQuery的文檔在這裏:[Namespaced Events](http://docs.jquery.com/Namespaced_Events) – Rup 2012-07-09 11:15:32

+0

很好的例子。在閱讀你的答案後,我毫不懷疑在我心中。感謝Utkanos.nice的方式來解釋 – Carlos 2012-07-09 11:16:13