2012-07-09 72 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