Skip to content

Commit

Permalink
Don't install unsupported event methods on the delegate proxy object
Browse files Browse the repository at this point in the history
If `event.stopImmediatePropagation()` is not supported by the current
browser, don't install that method either on the proxy object used
during event delegation. This helps getting more descriptive error
messages.

Closes madrobby#774
  • Loading branch information
atrl authored and mislav committed Nov 29, 2013
1 parent f11684e commit a1a9dce
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/event.js
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,7 @@
if (!ignoreProperties.test(key) && event[key] !== undefined) proxy[key] = event[key]

$.each(eventMethods, function(name, predicate) {
if (!event[name]) return
proxy[name] = function(){
this[predicate] = returnTrue
return event[name].apply(event, arguments)
Expand Down
25 changes: 25 additions & 0 deletions test/event.html
Original file line number Diff line number Diff line change
Expand Up @@ -278,6 +278,31 @@ <h1>Zepto event tests</h1>

this.el.trigger('myevent')
t.assertIdentical(data, gotData)
},

testDelegateEventMethods: function(t){
var methodName,
eventMethods = {
preventDefault: 'isDefaultPrevented',
stopImmediatePropagation: 'isImmediatePropagationStopped',
stopPropagation: 'isPropagationStopped'
},
eventMethodResults = {}

$(document).on('click', 'div', function(event){
$.each(eventMethods, function(methodName, predicate){
if (event[methodName]) {
event[methodName]()
eventMethodResults[predicate] = event[predicate]()
}
})
})

click($('<span>').appendTo(this.el))

$.each(eventMethodResults, function(predicate, value){
t.assertTrue(value, predicate)
})
}
})
})()
Expand Down

0 comments on commit a1a9dce

Please sign in to comment.