$.fn.preempt takes namespaced event names

This commit is contained in:
Corey Johnson & Nathan Sobo 2012-04-18 15:53:42 -07:00
parent 6a260a8359
commit 6037d83f2b
2 changed files with 19 additions and 2 deletions

View File

@ -5,6 +5,7 @@ describe 'jQuery extensions', ->
[returnValue, element, events] = []
beforeEach ->
returnValue = undefined
element = $("<div>")
events = []
@ -22,4 +23,19 @@ describe 'jQuery extensions', ->
it 'does not call subsequent handlers', ->
returnValue = false
element.trigger 'foo'
expect(events).toEqual [2]
expect(events).toEqual [2]
describe 'when the event is namespaced', ->
it 'calls handler', ->
element.preempt 'foo.bar', -> events.push(4)
element.trigger 'foo'
expect(events).toEqual [4,2,1,3]
events = []
element.trigger 'foo.bar'
expect(events).toEqual [4]
events = []
element.off('.bar')
element.trigger 'foo'
expect(events).toEqual [2,1,3]

View File

@ -19,5 +19,6 @@ $.fn.preempt = (eventName, handler) ->
@on eventName, (e) ->
if handler() == false then e.stopImmediatePropagation()
handlers = @data('events')[eventName]
eventNameWithoutNamespace = eventName.split('.')[0]
handlers = @data('events')[eventNameWithoutNamespace]
handlers.unshift(handlers.pop())