5

这两段代码有什么区别?两者都运行良好,那么为什么要在函数中使用 .dropdown.data-api 呢?我在互联网上阅读了有关命名空间的信息,但对此我不清楚。谁能告诉我命名空间函数的用途是什么?

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

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

1 回答 1

6

如果您希望取消绑定或触发它,则命名事件允许您定位特定事件。

想象一下,您有两个相同类型的事件绑定到相同的元素。

$('.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')。]

于 2012-07-09T11:13:00.610 回答