2011-02-01 83 views
5

我只是碰到了一些jQuery的,看起来像这样跑:这似乎是一个Javascript事件的类。它是什么?

$('.add-row').live('click.add', function() { 
    // do something 
} 

这似乎是结合“click.add”事件。我自己使用自定义事件并认为它们很棒,但在我们的代码库上执行git grep时,并没有显示触发自定义事件click.add的任何地方,并且无论如何,此行为都是由正常的点击触发的。我也没有在HTML中的任何地方看到.add类。

我不认为你可以在Javascript事件上有类。任何想法这个奇怪的语法是什么?

回答

5

这是一个叫做namespaced events的功能。在这个例子中,add是一个命名空间。它实际上是一个事件类,以便您可以对它们进行分类并相应地处理/触发它们。例如,您可以编写一个插件,并给每一个事件处理程序的myPlugin命名空间,这样就可以不删除用户的其他事件处理拆散他们:

$('a').bind('click.myPlugin', function(){ /*...*/ }); // bind with the myPlugin namespace 
$('a').bind('click'), function() { /* ... */ }); // bind without a namespace 
$('a').unbind('.myPlugin'); // only removes the first function 

这适用于trigger为好。

+0

很好的例子!我实际上正在研究一个可以从这种技术中受益的jQuery插件。感谢您不仅展示了这是什么,而且还展示了为什么可以使用它。 – 2011-02-01 20:40:53

7

参见http://api.jquery.com/event.namespace/和特别http://api.jquery.com/bind/

如果EVENTTYPE字符串包含一个 周期字符,则事件被 命名空间(。)。句点字符 将该事件与其名称空间 分开。例如,在呼叫 .bind('click.name',处理程序)中, 字符串单击是事件类型,并且 字符串名称是命名空间。 命名空间允许我们解除绑定,或者 触发某些类型的事件,而不会影响其他的 。有关更多信息,请参阅.unbind()的讨论 。

相关问题