5

これら 2 つのコードの違いは何ですか? どちらも完璧に機能しているのに、なぜ関数で .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

イベントのネームスペースを使用すると、特定のイベントをターゲットにすることができます。たとえば、バインドを解除したり、トリガーしたりする必要があります。

同じ要素にバインドされた同じ種類の 2 つのイベントがあるとします。

$('.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 が以下で指摘しているように、名前空間は、イベント タイプ名を参照する必要さえない場合があることを意味します。したがって、マウスオーバーとクリックの両方のイベントが 1 つの名前空間にある場合は、両方をバインド解除できますoff('.namespace')。]

于 2012-07-09T11:13:00.610 に答える