Skip to content

Commit

Permalink
Fix delegated DOM events
Browse files Browse the repository at this point in the history
Previously, delegated events would only work on the first context that
was used for delegation.

If the following had been done:

interact('*', {context: document.body}).on('click', listener1);
interact('*').on('click', listener2);

then listener2 would never be called.
  • Loading branch information
taye committed Nov 23, 2014
1 parent de458de commit e972154
Showing 1 changed file with 15 additions and 5 deletions.
20 changes: 15 additions & 5 deletions interact.js
Original file line number Diff line number Diff line change
Expand Up @@ -3281,13 +3281,13 @@
fakeEvent.preventDefault = preventOriginalDefault;

// climb up document tree looking for selector matches
while (element && element !== element.ownerDocument) {
while (element && (element.ownerDocument && element !== element.ownerDocument)) {
for (var i = 0; i < delegated.selectors.length; i++) {
var selector = delegated.selectors[i],
context = delegated.contexts[i];

if (matchesSelector(element, selector)
&& context === event.currentTarget
&& nodeContains(context, event.target)
&& nodeContains(context, element)) {

var listeners = delegated.listeners[i];
Expand Down Expand Up @@ -4647,8 +4647,10 @@
= (object) This Interactable
\*/
on: function (eventType, listener, useCapture) {
var i;

if (isArray(eventType)) {
for (var i = 0; i < eventType.length; i++) {
for (i = 0; i < eventType.length; i++) {
this.on(eventType[i], listener, useCapture);
}

Expand Down Expand Up @@ -4681,8 +4683,10 @@
};

// add delegate listener functions
events.add(this._context, eventType, delegateListener);
events.add(this._context, eventType, delegateUseCapture, true);
for (i = 0; i < documents.length; i++) {
events.add(documents[i], eventType, delegateListener);
events.add(documents[i], eventType, delegateUseCapture, true);
}
}

var delegated = delegatedEvents[eventType],
Expand Down Expand Up @@ -5550,6 +5554,12 @@

var win = doc.defaultView || doc.parentWindow;

// add delegate event listener
for (var eventType in delegatedEvents) {
events.add(doc, eventType, delegateListener);
events.add(doc, eventType, delegateUseCapture, true);
}

if (PointerEvent) {
if (PointerEvent === win.MSPointerEvent) {
pEventTypes = {
Expand Down

0 comments on commit e972154

Please sign in to comment.