0

予期しない動作に遭遇しました。これが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)

これは予想される動作ですか?それともバグ?

4

1 に答える 1

0

これは / jQuery のバグだったようです。

アプリケーションを jQuery 1.10.x にアップグレードすると、期待していた動作が得られます。http://jsfiddle.net/7fRes/6/を参照してください。

(へー..だから、私の答えを提出する前に、ここにいくつかのコードを入れなければなりません..)

$.event.trigger('evName.foo');             // does NOT trigger (expected!)
$.event.trigger('evName');                 // triggers (expected!)
$.event.trigger('evName.someThing');       // triggers (expected!)
于 2013-10-25T11:49:13.303 に答える