予期しない動作に遭遇しました。これがjQueryのバグなのか、それとも単にそのように機能するのかはわかりません。
http://jsfiddle.net/7fRes/4/
私たちのアプリケーションはかなりの数のイベント ハンドラーを生成しており、トリガーを使用してそれらをトリガーするときに jQuery に呼び出させたいdocument
と考えています (これらは「グローバル イベント」と呼ばれていると思いますか?)。何が起こっているかをよりよく制御するために、それらに名前空間を追加しました。
$(document).on('evName.someThing', function(ev) {
output.append('<br />' + ++counter + ' triggered! ' + new Date().getSeconds());
})
output.on('evName2.funkyNameSpace', function() {
output.append('<br />' + ++counter + ' funky click!');
})
document
イベントのトリガーは、特定の要素でイベントを トリガーする場合とは異なる動作をするようです:
- 特定の要素の名前空間を持つイベントは、期待どおりに動作します。イベントの種類と名前空間が完全に一致すると、適切なハンドラーが呼び出されます。
例:
output.trigger('evName2'); // triggers (expected)
output.trigger('evName2.aaaaaNamespace'); // does not trigger (expected)
output.trigger('evName2.funkyNameSpace'); // triggers (expected)
- しかし、グローバル イベントの場合、名前空間を追加しても、呼び出されるハンドラを制限できないようです。追加する名前空間に関係なく、ハンドラーは常に呼び出されます。一致するイベント タイプのみが必要です。
例:
$.event.trigger('evName.someThingElse'); // triggers (hmmm?)
$.event.trigger('evName.someThinggg'); // triggers (hmmm?)
$.event.trigger('evName.foo'); // triggers (hmmm?)
$.event.trigger('evName'); // triggers (expected)
$.event.trigger('evNameeeeee'); // does not trigger (expected)
これは予想される動作ですか?それともバグ?