jQuery中的命名空间函数

时间:2012-07-09 11:04:46

标签: jquery

这两段代码有什么区别?两者都工作得很好,为什么在函数中使用.dropdown.data-api?我在互联网上阅读了关于命名空间的内容,但我不清楚这一点。谁能告诉我命名空间函数的用途是什么?

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

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

1 个答案:

答案 0 :(得分: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

[ EDIT - 正如@jfrej右边指出的那样,名称空间意味着你有时甚至不需要引用事件类型名称。因此,如果您在单个命名空间中都有鼠标悬停和单击事件,则可以使用off('.namespace')取消绑定。]